diff --git a/dandischema/models.py b/dandischema/models.py index c91afad0..7a98b607 100644 --- a/dandischema/models.py +++ b/dandischema/models.py @@ -1,2082 +1,21 @@ -from __future__ import annotations - -from datetime import date, datetime -from enum import Enum -import re -from typing import ( - TYPE_CHECKING, - Annotated, - Any, - Dict, - List, - Literal, - Optional, - Sequence, - Type, - TypeVar, - Union, -) -from warnings import warn - -from pydantic import ( - UUID4, - AnyHttpUrl, - BaseModel, - ConfigDict, - EmailStr, - Field, - GetJsonSchemaHandler, - SerializerFunctionWrapHandler, - StringConstraints, - ValidationInfo, - field_serializer, - field_validator, - model_validator, -) -from pydantic.json_schema import JsonSchemaValue -from pydantic_core import CoreSchema, InitErrorDetails -from pydantic_core import ValidationError as _CoreValidationError -from typing_extensions import Self -from zarr_checksum.checksum import InvalidZarrChecksum, ZarrDirectoryDigest - -from dandischema.conf import ( - DEFAULT_INSTANCE_NAME, - UNVENDORED_DOI_PREFIX_PATTERN, - UNVENDORED_ID_PATTERN, - get_instance_config, -) - -from .consts import DANDI_SCHEMA_VERSION -from .digests.dandietag import DandiETag -from .types import ByteSizeJsonSchema -from .utils import name2title - -try: - from anys import AnyBase -except ImportError: - _has_anys = False -else: - _has_anys = True - -# Load needed configurations into constants -_INSTANCE_CONFIG = get_instance_config() - -# Regex pattern for the prefix of identifiers -ID_PATTERN = ( - _INSTANCE_CONFIG.instance_name - if _INSTANCE_CONFIG.instance_name != DEFAULT_INSTANCE_NAME - else UNVENDORED_ID_PATTERN -) - -# The pattern that a DOI prefix of a dandiset must conform to -DOI_PREFIX_PATTERN = ( - re.escape(_INSTANCE_CONFIG.doi_prefix) - if _INSTANCE_CONFIG.doi_prefix is not None - else UNVENDORED_DOI_PREFIX_PATTERN -) - -# The pattern of the DANDI instance URL -DANDI_INSTANCE_URL_PATTERN = ( - ".*" - if _INSTANCE_CONFIG.instance_url is None - else re.escape(str(_INSTANCE_CONFIG.instance_url).rstrip("/")) -) - -NAME_PATTERN = r"^([\w\s\-\.']+),\s+([\w\s\-\.']+)$" -UUID_PATTERN = ( - "[a-f0-9]{8}[-]*[a-f0-9]{4}[-]*" "[a-f0-9]{4}[-]*[a-f0-9]{4}[-]*[a-f0-9]{12}$" -) -ASSET_UUID_PATTERN = r"^dandiasset:" + UUID_PATTERN -VERSION_NUM_PATTERN = r"\d+\.\d+\.\d+" -VERSION_PATTERN = rf"\d{{6}}/{VERSION_NUM_PATTERN}" -_INNER_DANDI_DOI_PATTERN = ( - rf"{DOI_PREFIX_PATTERN}/{ID_PATTERN.lower()}\.{VERSION_PATTERN}" +from .models_linkml import * # noqa: F401,F403 +from .models_orig import ( # noqa: F401 + DANDI_INSTANCE_URL_PATTERN, + DANDI_NSKEY, + get_schema_version, ) -DANDI_DOI_PATTERN = ( - rf"^{_INNER_DANDI_DOI_PATTERN}$" - if _INSTANCE_CONFIG.doi_prefix is not None - else rf"^({_INNER_DANDI_DOI_PATTERN}|)$" # This matches an empty string as well -) -DANDI_PUBID_PATTERN = rf"^{ID_PATTERN}:{VERSION_PATTERN}$" -DANDI_NSKEY = "dandi" # Namespace for DANDI ontology - -PUBLISHED_VERSION_URL_PATTERN = ( - rf"^{DANDI_INSTANCE_URL_PATTERN}/dandiset/{VERSION_PATTERN}$" -) -MD5_PATTERN = r"[0-9a-f]{32}" -SHA256_PATTERN = r"[0-9a-f]{64}" - -M = TypeVar("M", bound=BaseModel) - - -def diff_models(model1: M, model2: M) -> None: - """Perform a field-wise diff""" - for field in model1.model_fields: - if getattr(model1, field) != getattr(model2, field): - print(f"{field} is different") - - -if TYPE_CHECKING: - # This is just a placeholder for static type checking - class LicenseType(Enum): - ... # fmt: skip - -else: - # `sorted()` makes the member order, and hence the JSON schema, consistent. - LicenseType = Enum( - "LicenseType", - [ - (license_.name, license_.value) - for license_ in sorted(_INSTANCE_CONFIG.licenses, key=lambda lic: lic.value) - ], - ) - r""" - An enumeration of supported licenses - - The value of each member is a string that matches the regex pattern of - `^([^:\s]+):(\S+)$` in which the first group matches the license scheme such - as `"spdx"`, and the second group matches the license identifier such as - `"CC-BY-4.0"`. - """ - - -class AccessType(Enum): - """An enumeration of access status options""" - - #: The dandiset is openly accessible - OpenAccess = f"{DANDI_NSKEY}:OpenAccess" - - #: The dandiset is embargoed - EmbargoedAccess = f"{DANDI_NSKEY}:EmbargoedAccess" - - """ - Uncomment when restricted access is implemented: - #: The dandiset is restricted - RestrictedAccess = f"{DANDI_NSKEY}:RestrictedAccess" - """ - - -class DigestType(Enum): - """An enumeration of checksum types""" - - #: MD5 checksum - md5 = f"{DANDI_NSKEY}:md5" - - #: SHA1 checksum - sha1 = f"{DANDI_NSKEY}:sha1" - - #: SHA2-256 checksum - sha2_256 = f"{DANDI_NSKEY}:sha2-256" - - #: SHA3-256 checksum - sha3_256 = f"{DANDI_NSKEY}:sha3-256" - - #: BLAKE2B-256 checksum - blake2b_256 = f"{DANDI_NSKEY}:blake2b-256" - - #: BLAKE3-256 checksum - blake3 = f"{DANDI_NSKEY}:blake3" - - #: S3-style ETag - dandi_etag = f"{DANDI_NSKEY}:dandi-etag" - - #: DANDI Zarr checksum - dandi_zarr_checksum = f"{DANDI_NSKEY}:dandi-zarr-checksum" - - -class IdentifierType(Enum): - """An enumeration of identifiers""" - - doi = f"{DANDI_NSKEY}:doi" - orcid = f"{DANDI_NSKEY}:orcid" - ror = f"{DANDI_NSKEY}:ror" - dandi = f"{DANDI_NSKEY}:dandi" - rrid = f"{DANDI_NSKEY}:rrid" - - -class RelationType(Enum): - """An enumeration of resource relations""" - - #: Indicates that B includes A in a citation - IsCitedBy = "dcite:IsCitedBy" - - #: Indicates that A includes B in a citation - Cites = "dcite:Cites" - - #: Indicates that A is a supplement to B - IsSupplementTo = "dcite:IsSupplementTo" - - #: Indicates that B is a supplement to A - IsSupplementedBy = "dcite:IsSupplementedBy" - - #: Indicates A is continued by the work B - IsContinuedBy = "dcite:IsContinuedBy" - - #: Indicates A is a continuation of the work B - Continues = "dcite:Continues" - - #: Indicates A describes B - Describes = "dcite:Describes" - - #: Indicates A is described by B - IsDescribedBy = "dcite:IsDescribedBy" - - #: Indicates resource A has additional metadata B - HasMetadata = "dcite:HasMetadata" - - #: Indicates additional metadata A for a resource B - IsMetadataFor = "dcite:IsMetadataFor" - - #: Indicates A has a version (B) - HasVersion = "dcite:HasVersion" - - #: Indicates A is a version of B - IsVersionOf = "dcite:IsVersionOf" - - #: Indicates A is a new edition of B - IsNewVersionOf = "dcite:IsNewVersionOf" - - #: Indicates A is a previous edition of B - IsPreviousVersionOf = "dcite:IsPreviousVersionOf" - - #: Indicates A is a portion of B - IsPartOf = "dcite:IsPartOf" - - #: Indicates A includes the part B - HasPart = "dcite:HasPart" - - #: Indicates A is used as a source of information by B - IsReferencedBy = "dcite:IsReferencedBy" - - #: Indicates B is used as a source of information for A - References = "dcite:References" - - #: Indicates B is documentation about/explaining A - IsDocumentedBy = "dcite:IsDocumentedBy" - - #: Indicates A is documentation about B - Documents = "dcite:Documents" - - #: Indicates B is used to compile or create A - IsCompiledBy = "dcite:IsCompiledBy" - - #: Indicates B is the result of a compile or creation event using A - Compiles = "dcite:Compiles" - - #: Indicates A is a variant or different form of B - IsVariantFormOf = "dcite:IsVariantFormOf" - - #: Indicates A is the original form of B - IsOriginalFormOf = "dcite:IsOriginalFormOf" - - #: Indicates that A is identical to B - IsIdenticalTo = "dcite:IsIdenticalTo" - - #: Indicates that A is reviewed by B - IsReviewedBy = "dcite:IsReviewedBy" - - #: Indicates that A is a review of B - Reviews = "dcite:Reviews" - - #: Indicates B is a source upon which A is based - IsDerivedFrom = "dcite:IsDerivedFrom" - - #: Indicates A is a source upon which B is based - IsSourceOf = "dcite:IsSourceOf" - - #: Indicates A is required by B - IsRequiredBy = "dcite:IsRequiredBy" - - #: Indicates A requires B - Requires = "dcite:Requires" - - #: Indicates A replaces B - Obsoletes = "dcite:Obsoletes" - - #: Indicates A is replaced by B - IsObsoletedBy = "dcite:IsObsoletedBy" - - #: Indicates A is published in B - IsPublishedIn = "dcite:IsPublishedIn" - - -class ParticipantRelationType(Enum): - """An enumeration of participant relations""" - - #: Indicates that A is a child of B - isChildOf = f"{DANDI_NSKEY}:isChildOf" - - #: Indicates that A is a parent of B - isParentOf = f"{DANDI_NSKEY}:isParentOf" - - #: Indicates that A is a sibling of B - isSiblingOf = f"{DANDI_NSKEY}:isSiblingOf" - - #: Indicates that A is a monozygotic twin of B - isMonozygoticTwinOf = f"{DANDI_NSKEY}:isMonozygoticTwinOf" - - #: Indicates that A is a dizygotic twin of B - isDizygoticTwinOf = f"{DANDI_NSKEY}:isDizygoticTwinOf" - - -class RoleType(Enum): - """An enumeration of roles""" - - #: Author - Author = "dcite:Author" - - #: Conceptualization - Conceptualization = "dcite:Conceptualization" - - #: Contact Person - ContactPerson = "dcite:ContactPerson" - - #: Data Collector - DataCollector = "dcite:DataCollector" - - #: Data Curator - DataCurator = "dcite:DataCurator" - - #: Data Manager - DataManager = "dcite:DataManager" - - #: Formal Analysis - FormalAnalysis = "dcite:FormalAnalysis" - - #: Funding Acquisition - FundingAcquisition = "dcite:FundingAcquisition" - - #: Investigation - Investigation = "dcite:Investigation" - - #: Maintainer - Maintainer = "dcite:Maintainer" - - #: Methodology - Methodology = "dcite:Methodology" - - #: Producer - Producer = "dcite:Producer" - - #: Project Leader - ProjectLeader = "dcite:ProjectLeader" - - #: Project Manager - ProjectManager = "dcite:ProjectManager" - - #: Project Member - ProjectMember = "dcite:ProjectMember" - - #: Project Administration - ProjectAdministration = "dcite:ProjectAdministration" - - #: Researcher - Researcher = "dcite:Researcher" - - #: Resources - Resources = "dcite:Resources" - - #: Software - Software = "dcite:Software" - - #: Supervision - Supervision = "dcite:Supervision" - - #: Validation - Validation = "dcite:Validation" - - #: Visualization - Visualization = "dcite:Visualization" - - #: Funder - Funder = "dcite:Funder" - - #: Sponsor - Sponsor = "dcite:Sponsor" - - #: Participant in a study - StudyParticipant = "dcite:StudyParticipant" - - #: Affiliated with an entity - Affiliation = "dcite:Affiliation" - - #: Approved ethics protocol - EthicsApproval = "dcite:EthicsApproval" - - #: Other - Other = "dcite:Other" - - -class ResourceType(Enum): - """An enumeration of resource types""" - - #: Audiovisual: A series of visual representations imparting an impression of motion - # when shown in succession. May or may not include sound. - Audiovisual = "dcite:Audiovisual" - - #: Book: A medium for recording information in the form of writing or images, - # typically composed of many pages bound together and protected by a cover. - Book = "dcite:Book" - - #: BookChapter: One of the main divisions of a book. - BookChapter = "dcite:BookChapter" - - #: Collection: An aggregation of resources, which may encompass collections of one - # resourceType as well as those of mixed types. A collection is described as a - # group; its parts may also be separately described. - Collection = "dcite:Collection" - - #: ComputationalNotebook: A virtual notebook environment used for literate - # programming. - ComputationalNotebook = "dcite:ComputationalNotebook" - - #: ConferencePaper: Article that is written with the goal of being accepted to a - # conference. - ConferencePaper = "dcite:ConferencePaper" - - #: ConferenceProceeding: Collection of academic papers published in the context of - # an academic conference. - ConferenceProceeding = "dcite:ConferenceProceeding" - - #: DataPaper: A factual and objective publication with a focused intent to identify - # and describe specific data, sets of data, or data collections to facilitate - # discoverability. - DataPaper = "dcite:DataPaper" - - #: Dataset: Data encoded in a defined structure. - Dataset = "dcite:Dataset" - - #: Dissertation: A written essay, treatise, or thesis, especially one written by a - # candidate for the degree of Doctor of Philosophy. - Dissertation = "dcite:Dissertation" - - #: Event: A non-persistent, time-based occurrence. - Event = "dcite:Event" - - #: Image: A visual representation other than text. - Image = "dcite:Image" - - #: Instrument: A device, tool or apparatus used to obtain, measure and/or analyze - # data. - Instrument = "dcite:Instrument" - - #: InteractiveResource: A resource requiring interaction from the user to be - # understood, executed, or experienced. - InteractiveResource = "dcite:InteractiveResource" - - #: Journal: A scholarly publication consisting of articles that is published - # regularly throughout the year. - Journal = "dcite:Journal" - - #: JournalArticle: A written composition on a topic of interest, which forms a - # separate part of a journal. - JournalArticle = "dcite:JournalArticle" - - #: Model: An abstract, conceptual, graphical, mathematical or visualization model - # that represents empirical objects, phenomena, or physical processes. - Model = "dcite:Model" - - #: OutputManagementPlan: A formal document that outlines how research outputs are to - # be handled both during a research project and after the project is completed. - OutputManagementPlan = "dcite:OutputManagementPlan" - - #: PeerReview: Evaluation of scientific, academic, or professional work by others - # working in the same field. - PeerReview = "dcite:PeerReview" - - #: PhysicalObject: A physical object or substance. - PhysicalObject = "dcite:PhysicalObject" - - #: Preprint: A version of a scholarly or scientific paper that precedes formal peer - # review and publication in a peer-reviewed scholarly or scientific journal. - Preprint = "dcite:Preprint" - - #: Report: A document that presents information in an organized format for a - # specific audience and purpose. - Report = "dcite:Report" - - #: Service: An organized system of apparatus, appliances, staff, etc., for supplying - # some function(s) required by end users. - Service = "dcite:Service" - - #: Software: A computer program other than a computational notebook, in either - # source code (text) or compiled form. Use this type for general software components - # supporting scholarly research. Use the “ComputationalNotebook” value for virtual - # notebooks. - Software = "dcite:Software" - - #: Sound: A resource primarily intended to be heard. - Sound = "dcite:Sound" - - #: Standard: Something established by authority, custom, or general consent as a - # model, example, or point of reference. - Standard = "dcite:Standard" - - #: StudyRegistration: A detailed, time-stamped description of a research plan, often - # openly shared in a registry or published in a journal before the study is - # conducted to lend accountability and transparency in the hypothesis generating and - # testing process. - StudyRegistration = "dcite:StudyRegistration" - - #: Text: A resource consisting primarily of words for reading that is not covered by - # any other textual resource type in this list. - Text = "dcite:Text" - - #: Workflow: A structured series of steps which can be executed to produce a final - # outcome, allowing users a means to specify and enact their work in a more - # reproducible manner. - Workflow = "dcite:Workflow" - - #: Other: A resource that does not fit into any of the other categories. - Other = "dcite:Other" - - -class AgeReferenceType(Enum): - """An enumeration of age reference""" - - #: Age since Birth - BirthReference = f"{DANDI_NSKEY}:BirthReference" - - #: Age of a pregnancy (https://en.wikipedia.org/wiki/Gestational_age) - GestationalReference = f"{DANDI_NSKEY}:GestationalReference" - - -class DandiBaseModel(BaseModel): - id: Optional[str] = Field( - default=None, - description="Uniform resource identifier", - json_schema_extra={"readOnly": True}, - ) - schemaKey: str = Field( - "DandiBaseModel", validate_default=True, json_schema_extra={"readOnly": True} - ) - - def json_dict(self) -> dict: - """ - Recursively convert the instance to a `dict` of JSONable values, - including converting enum values to strings. `None` fields - are omitted. - """ - warn( - "`DandiBaseModel.json_dict()` is deprecated. Use " - "`pydantic.BaseModel.model_dump(mode='json', exclude_none=True)` instead.", - DeprecationWarning, - stacklevel=2, - ) - return self.model_dump(mode="json", exclude_none=True) - - if _has_anys: - - @field_serializer("*", mode="wrap") - def preserve_anys_values( - self, value: Any, handler: SerializerFunctionWrapHandler - ) -> Any: - return value if isinstance(value, AnyBase) else handler(value) - - @field_validator("schemaKey") - @classmethod - def ensure_schemakey(cls, val: str) -> str: - if val != cls.__name__: - raise ValueError(f"schemaKey {val} does not match classname {cls.__name__}") - return val - - @classmethod - def unvalidated(__pydantic_cls__: Type[M], **data: Any) -> M: - """Allow model to be returned without validation""" - - warn( - "`DandiBaseModel.unvalidated()` is deprecated. " - "Use `pydantic.BaseModel.model_construct()` instead.", - DeprecationWarning, - stacklevel=2, - ) - - return __pydantic_cls__.model_construct(**data) - - @classmethod - def to_dictrepr(__pydantic_cls__: Type["DandiBaseModel"]) -> str: - return ( - __pydantic_cls__.model_construct() - .__repr__() - .replace(__pydantic_cls__.__name__, "dict") - ) - - @classmethod - def __get_pydantic_json_schema__( - cls, - core_schema_: CoreSchema, - handler: GetJsonSchemaHandler, - ) -> JsonSchemaValue: - schema = handler(core_schema_) - schema = handler.resolve_ref_schema(schema) - - if schema["title"] == "PropertyValue": - schema["required"] = sorted({"value"}.union(schema.get("required", []))) - schema["title"] = name2title(schema["title"]) - if schema["type"] == "object": - schema["required"] = sorted({"schemaKey"}.union(schema.get("required", []))) - for prop, value in schema.get("properties", {}).items(): - if schema["title"] == "Person": - if prop == "name": - # JSON schema doesn't support validating unicode - # characters using the \w pattern, but Python does. So - # we are dropping the regex pattern for the schema. - del value["pattern"] - if value.get("title") is None or value["title"] == prop.title(): - value["title"] = name2title(prop) - if re.match("\\^https?://", value.get("pattern", "")): - # triggers only for ROR in identifier - value["format"] = "uri" - if value.get("format", None) == "uri": - value["maxLength"] = 1000 - allOf = value.get("allOf") - anyOf = value.get("anyOf") - items = value.get("items") - if allOf is not None: - if len(allOf) == 1 and "$ref" in allOf[0]: - value["$ref"] = allOf[0]["$ref"] - del value["allOf"] - elif len(allOf) > 1: - value["oneOf"] = value["allOf"] - value["type"] = "object" - del value["allOf"] - if anyOf is not None: - if len(anyOf) > 1 and any("$ref" in val for val in anyOf): - value["type"] = "object" - if items is not None: - anyOf = items.get("anyOf") - if ( - anyOf is not None - and len(anyOf) > 1 - and any("$ref" in val for val in anyOf) - ): - value["items"]["type"] = "object" - # In pydantic 1.8+ all Literals are mapped on to enum - # This presently breaks the schema editor UI. Revert - # to const when generating the schema. - # Note: this no longer happens with custom metaclass - if prop == "schemaKey": - if "enum" in value and len(value["enum"]) == 1: - value["const"] = value["enum"][0] - del value["enum"] - else: - value["const"] = value["default"] - if "readOnly" in value: - del value["readOnly"] - - return schema - - -class PropertyValue(DandiBaseModel): - maxValue: Optional[float] = Field(None, json_schema_extra={"nskey": "schema"}) - minValue: Optional[float] = Field(None, json_schema_extra={"nskey": "schema"}) - unitText: Optional[str] = Field(None, json_schema_extra={"nskey": "schema"}) - value: Union[Any, List[Any]] = Field( - None, - validate_default=True, - json_schema_extra={"nskey": "schema"}, - description="The value associated with this property.", - ) - valueReference: Optional["PropertyValue"] = Field( - None, json_schema_extra={"nskey": "schema"} - ) # Note: recursive (circular or not) - propertyID: Optional[Union[IdentifierType, AnyHttpUrl]] = Field( - None, - description="A commonly used identifier for " - "the characteristic represented by the property. " - "For example, a known prefix like DOI or a full URL.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["PropertyValue"] = Field( - "PropertyValue", validate_default=True, json_schema_extra={"readOnly": True} - ) - - @field_validator("value") - @classmethod - def ensure_value(cls, val: Union[Any, List[Any]]) -> Union[Any, List[Any]]: - if not val: - raise ValueError( - "The value field of a PropertyValue cannot be None or empty." - ) - return val - - _ldmeta = {"nskey": "schema"} - - -# This is mostly not needed at all since self-referencing models -# are automatically resolved by Pydantic in a pretty consistent way even in Pydantic V1 -# https://docs.pydantic.dev/1.10/usage/postponed_annotations/#self-referencing-models -# and continue to be so in Pydantic V2 -# https://docs.pydantic.dev/latest/concepts/postponed_annotations/#self-referencing-or-recursive-models -PropertyValue.model_rebuild() - -Identifier = str -ORCID = str -RORID = str -DANDI = str -RRID = str - - -class BaseType(DandiBaseModel): - """Base class for enumerated types""" - - identifier: Optional[ - Annotated[ - Union[ - AnyHttpUrl, - Annotated[ - str, StringConstraints(pattern=r"^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\._]+$") - ], - ], - Field(union_mode="left_to_right"), - ] - ] = Field( - None, - description="The identifier can be any url or a compact URI, preferably" - " supported by identifiers.org.", - json_schema_extra={"nskey": "schema"}, - ) - name: Optional[str] = Field( - None, - description="The name of the item.", - max_length=150, - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: str = Field( - "BaseType", validate_default=True, json_schema_extra={"readOnly": True} - ) - _ldmeta = {"rdfs:subClassOf": ["prov:Entity", "schema:Thing"], "nskey": DANDI_NSKEY} - - @classmethod - def __get_pydantic_json_schema__( - cls, - core_schema_: CoreSchema, - handler: GetJsonSchemaHandler, - ) -> JsonSchemaValue: - schema = super().__get_pydantic_json_schema__(core_schema_, handler) - - for prop, value in schema.get("properties", {}).items(): - # This check removes the anyOf field from the identifier property - # in the schema generation. This relates to a UI issue where two - # basic properties, in this case "string", is dropped from the UI. - if prop == "identifier": - for option in value.pop("anyOf", []): - if option.get("format", "") == "uri": - value.update(**option) - value["maxLength"] = 1000 - - return schema - - -class AssayType(BaseType): - """OBI based identifier for the assay(s) used""" - - schemaKey: Literal["AssayType"] = Field( - "AssayType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class SampleType(BaseType): - """OBI based identifier for the sample type used""" - - schemaKey: Literal["SampleType"] = Field( - "SampleType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class Anatomy(BaseType): - """UBERON or other identifier for anatomical part studied""" - - schemaKey: Literal["Anatomy"] = Field( - "Anatomy", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class StrainType(BaseType): - """Identifier for the strain of the sample""" - - schemaKey: Literal["StrainType"] = Field( - "StrainType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class SexType(BaseType): - """Identifier for the sex of the sample""" - - schemaKey: Literal["SexType"] = Field( - "SexType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class SpeciesType(BaseType): - """Identifier for species of the sample""" - - schemaKey: Literal["SpeciesType"] = Field( - "SpeciesType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class Disorder(BaseType): - """Biolink, SNOMED, or other identifier for disorder studied""" - - dxdate: Optional[List[Union[date, datetime]]] = Field( - None, - title="Dates of diagnosis", - description="Dates of diagnosis", - json_schema_extra={"nskey": DANDI_NSKEY, "rangeIncludes": "schema:Date"}, - ) - schemaKey: Literal["Disorder"] = Field( - "Disorder", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class GenericType(BaseType): - """An object to capture any type for about""" - - schemaKey: Literal["GenericType"] = Field( - "GenericType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class ApproachType(BaseType): - """Identifier for approach used""" - - schemaKey: Literal["ApproachType"] = Field( - "ApproachType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class MeasurementTechniqueType(BaseType): - """Identifier for measurement technique used""" - - schemaKey: Literal["MeasurementTechniqueType"] = Field( - "MeasurementTechniqueType", - validate_default=True, - json_schema_extra={"readOnly": True}, - ) - - -class StandardsType(BaseType): - """Identifier for data standard used""" - - schemaKey: Literal["StandardsType"] = Field( - "StandardsType", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -nwb_standard = StandardsType( - name="Neurodata Without Borders (NWB)", - identifier="RRID:SCR_015242", -).model_dump(mode="json", exclude_none=True) - -bids_standard = StandardsType( - name="Brain Imaging Data Structure (BIDS)", - identifier="RRID:SCR_016124", -).model_dump(mode="json", exclude_none=True) - -ome_ngff_standard = StandardsType( - name="OME/NGFF Standard", - identifier="DOI:10.25504/FAIRsharing.9af712", -).model_dump(mode="json", exclude_none=True) - - -class ContactPoint(DandiBaseModel): - email: Optional[EmailStr] = Field( - None, - description="Email address of contact.", - json_schema_extra={"nskey": "schema"}, - ) - url: Optional[AnyHttpUrl] = Field( - None, - description="A Web page to find information on how to contact.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["ContactPoint"] = Field( - "ContactPoint", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = {"nskey": "schema"} - - -class Contributor(DandiBaseModel): - identifier: Optional[Identifier] = Field( - None, - title="A common identifier", - description="Use a common identifier such as ORCID (orcid.org) for " - "people or ROR (ror.org) for institutions.", - json_schema_extra={"nskey": "schema"}, - ) - name: Optional[str] = Field(None, json_schema_extra={"nskey": "schema"}) - email: Optional[EmailStr] = Field(None, json_schema_extra={"nskey": "schema"}) - url: Optional[AnyHttpUrl] = Field(None, json_schema_extra={"nskey": "schema"}) - roleName: Optional[List[RoleType]] = Field( - None, - title="Role", - description="Role(s) of the contributor. Multiple roles can be selected.", - json_schema_extra={"nskey": "schema"}, - ) - includeInCitation: bool = Field( - True, - title="Include contributor in citation", - description="A flag to indicate whether a contributor should be included " - "when generating a citation for the item.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - awardNumber: Optional[Identifier] = Field( - None, - title="Identifier for an award", - description="Identifier associated with a sponsored or gift award.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - schemaKey: Literal["Contributor", "Organization", "Person"] = Field( - "Contributor", validate_default=True, json_schema_extra={"readOnly": True} - ) - - @model_validator(mode="after") - def ensure_contact_person_has_email(self) -> Contributor: - role_names = self.roleName - - if role_names is not None and RoleType.ContactPerson in role_names: - if self.email is None: - raise ValueError("Contact person must have an email address.") - - return self - - -class Organization(Contributor): - identifier: Optional[RORID] = Field( - None, - title="A ror.org identifier", - description="Use an ror.org identifier for institutions.", - pattern=r"^https://ror.org/[a-z0-9]+$", - json_schema_extra={"nskey": "schema"}, - ) - - includeInCitation: bool = Field( - False, - title="Include contributor in citation", - description="A flag to indicate whether a contributor should be included " - "when generating a citation for the item", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - contactPoint: Optional[List[ContactPoint]] = Field( - None, - title="Organization contact information", - description="Contact for the organization", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["Organization"] = Field( - "Organization", validate_default=True, json_schema_extra={"readOnly": True} - ) - _ldmeta = { - "rdfs:subClassOf": ["schema:Organization", "prov:Organization"], - "nskey": DANDI_NSKEY, - } - - -class Affiliation(DandiBaseModel): - identifier: Optional[RORID] = Field( - None, - title="A ror.org identifier", - description="Use an ror.org identifier for institutions.", - pattern=r"^https://ror.org/[a-z0-9]+$", - json_schema_extra={"nskey": "schema"}, - ) - name: str = Field( - json_schema_extra={"nskey": "schema"}, description="Name of organization" - ) - schemaKey: Literal["Affiliation"] = Field( - "Affiliation", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:Organization", "prov:Organization"], - "nskey": DANDI_NSKEY, - } - - -class Person(Contributor): - identifier: Optional[ORCID] = Field( - None, - title="An ORCID identifier", - description="An ORCID (orcid.org) identifier for an individual.", - pattern=r"^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$", - json_schema_extra={"nskey": "schema"}, - ) - name: str = Field( - title="Use Last, First. Example: Lovelace, Augusta Ada", - description="Use the format: familyname, given names ...", - pattern=NAME_PATTERN, - json_schema_extra={"nskey": "schema"}, - ) - affiliation: Optional[List[Affiliation]] = Field( - None, - description="An organization that this person is affiliated with.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["Person"] = Field( - "Person", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:Person", "prov:Person"], - "nskey": DANDI_NSKEY, - } - - -class Software(DandiBaseModel): - identifier: Optional[RRID] = Field( - None, - pattern=r"^RRID:.*", - title="Research resource identifier", - description="RRID of the software from scicrunch.org.", - json_schema_extra={"nskey": "schema"}, - ) - name: str = Field(json_schema_extra={"nskey": "schema"}) - version: str = Field(json_schema_extra={"nskey": "schema"}) - url: Optional[AnyHttpUrl] = Field( - None, - description="Web page for the software.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["Software"] = Field( - "Software", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:SoftwareApplication", "prov:Software"], - "nskey": DANDI_NSKEY, - } - - -class Agent(DandiBaseModel): - identifier: Optional[Identifier] = Field( - None, - title="Identifier", - description="Identifier for an agent.", - json_schema_extra={"nskey": "schema"}, - ) - name: str = Field( - json_schema_extra={"nskey": "schema"}, - ) - url: Optional[AnyHttpUrl] = Field(None, json_schema_extra={"nskey": "schema"}) - schemaKey: Literal["Agent"] = Field( - "Agent", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["prov:Agent"], - "nskey": DANDI_NSKEY, - } - - -class EthicsApproval(DandiBaseModel): - """Information about ethics committee approval for project""" - - identifier: Identifier = Field( - json_schema_extra={"nskey": "schema"}, - title="Approved protocol identifier", - description="Approved Protocol identifier, often a number or alphanumeric string.", - ) - contactPoint: Optional[ContactPoint] = Field( - None, - description="Information about the ethics approval committee.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["EthicsApproval"] = Field( - "EthicsApproval", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = {"rdfs:subClassOf": ["schema:Thing", "prov:Entity"], "nskey": DANDI_NSKEY} - - -class Resource(DandiBaseModel): - identifier: Optional[Identifier] = Field( - None, json_schema_extra={"nskey": "schema"} - ) - name: Optional[str] = Field( - None, title="A title of the resource", json_schema_extra={"nskey": "schema"} - ) - url: Optional[AnyHttpUrl] = Field( - None, title="URL of the resource", json_schema_extra={"nskey": "schema"} - ) - repository: Optional[str] = Field( - None, - title="Name of the repository", - description="Name of the repository in which the resource is housed.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - relation: RelationType = Field( - title="Resource relation", - description="Indicates how the resource is related to the dataset. " - "This relation should satisfy: dandiset resource.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - resourceType: Optional[ResourceType] = Field( - default=None, - title="Resource type", - description="The type of resource.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - - schemaKey: Literal["Resource"] = Field( - "Resource", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], - "rdfs:comment": "A resource related to the project (e.g., another " - "dataset, publication, Webpage)", - "nskey": DANDI_NSKEY, - } - - @model_validator(mode="after") - def identifier_or_url(self) -> "Resource": - identifier, url = self.identifier, self.url - if identifier is None and url is None: - raise ValueError("Both identifier and url cannot be None") - return self - - -class AccessRequirements(DandiBaseModel): - """Information about access options for the dataset""" - - status: AccessType = Field( - title="Access status", - description="The access status of the item.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - contactPoint: Optional[ContactPoint] = Field( - None, - description="Who or where to look for information about access.", - json_schema_extra={"nskey": "schema"}, - ) - description: Optional[str] = Field( - None, - description="Information about access requirements when embargoed or restricted", - json_schema_extra={"nskey": "schema"}, - ) - embargoedUntil: Optional[date] = Field( - None, - title="Embargo end date", - description="Date on which embargo ends.", - json_schema_extra={ - "readOnly": True, - "nskey": DANDI_NSKEY, - "rangeIncludes": "schema:Date", - }, - ) - schemaKey: Literal["AccessRequirements"] = Field( - "AccessRequirements", - validate_default=True, - json_schema_extra={"readOnly": True}, - ) - - _ldmeta = {"rdfs:subClassOf": ["schema:Thing", "prov:Entity"], "nskey": DANDI_NSKEY} - - @model_validator(mode="after") - def open_or_embargoed(self) -> "AccessRequirements": - status, embargoed = self.status, self.embargoedUntil - if status == AccessType.EmbargoedAccess and embargoed is None: - raise ValueError( - "An embargo end date is required for NIH awards to be in " - "compliance with NIH resource sharing policy." - ) - return self - - -class AssetsSummary(DandiBaseModel): - """Summary over assets contained in a dandiset (published or not)""" - - # stats which are not stats - numberOfBytes: int = Field( - json_schema_extra={"readOnly": True, "sameas": "schema:contentSize"} - ) - numberOfFiles: int = Field(json_schema_extra={"readOnly": True}) # universe - numberOfSubjects: Optional[int] = Field( - None, json_schema_extra={"readOnly": True} - ) # NWB + BIDS - numberOfSamples: Optional[int] = Field( - None, json_schema_extra={"readOnly": True} - ) # more of NWB - numberOfCells: Optional[int] = Field(None, json_schema_extra={"readOnly": True}) - - dataStandard: Optional[List[StandardsType]] = Field( - None, json_schema_extra={"readOnly": True} - ) - # Web UI: icons per each modality? - approach: Optional[List[ApproachType]] = Field( - None, json_schema_extra={"readOnly": True} - ) - # Web UI: could be an icon with number, which if hovered on show a list? - measurementTechnique: Optional[List[MeasurementTechniqueType]] = Field( - None, json_schema_extra={"readOnly": True, "nskey": "schema"} - ) - variableMeasured: Optional[List[str]] = Field( - None, json_schema_extra={"readOnly": True, "nskey": "schema"} - ) - - species: Optional[List[SpeciesType]] = Field( - None, json_schema_extra={"readOnly": True} - ) - schemaKey: Literal["AssetsSummary"] = Field( - "AssetsSummary", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], - "nskey": DANDI_NSKEY, - } - - -class Equipment(DandiBaseModel): - identifier: Optional[Identifier] = Field( - None, json_schema_extra={"nskey": "schema"} - ) - name: str = Field( - title="Title", - description="A name for the equipment.", - max_length=150, - json_schema_extra={"nskey": "schema"}, - ) - description: Optional[str] = Field( - None, - description="The description of the equipment.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["Equipment"] = Field( - "Equipment", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], - "nskey": DANDI_NSKEY, - } - - -class Activity(DandiBaseModel): - """Information about the Project activity""" - - identifier: Optional[Identifier] = Field( - None, json_schema_extra={"nskey": "schema"} - ) - name: str = Field( - title="Title", - description="The name of the activity.", - max_length=150, - json_schema_extra={"nskey": "schema"}, - ) - description: Optional[str] = Field( - None, - description="The description of the activity.", - json_schema_extra={"nskey": "schema"}, - ) - startDate: Optional[datetime] = Field(None, json_schema_extra={"nskey": "schema"}) - endDate: Optional[datetime] = Field(None, json_schema_extra={"nskey": "schema"}) - - # isPartOf: Optional["Activity"] = Field(None, json_schema_extra={"nskey": "schema"}) - # hasPart: Optional["Activity"] = Field(None, json_schema_extra={"nskey": "schema"}) - wasAssociatedWith: Optional[ - List[ - Annotated[ - Union[Person, Organization, Software, Agent], - Field(discriminator="schemaKey"), - ] - ] - ] = Field(None, json_schema_extra={"nskey": "prov"}) - used: Optional[List[Equipment]] = Field( - None, - description="A listing of equipment used for the activity.", - json_schema_extra={"nskey": "prov"}, - ) - schemaKey: Literal["Activity", "Project", "Session", "PublishActivity"] = Field( - "Activity", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["prov:Activity", "schema:Thing"], - "nskey": DANDI_NSKEY, - } - - -class Project(Activity): - name: str = Field( - title="Name of project", - description="The name of the project that generated this Dandiset or asset.", - max_length=150, - json_schema_extra={"nskey": "schema"}, - ) - description: Optional[str] = Field( - None, - description="A brief description of the project.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["Project"] = Field( - "Project", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class Session(Activity): - name: str = Field( - title="Name of session", - description="The name of the logical session associated with the asset.", - max_length=150, - json_schema_extra={"nskey": "schema"}, - ) - description: Optional[str] = Field( - None, - description="A brief description of the session.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["Session"] = Field( - "Session", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class PublishActivity(Activity): - schemaKey: Literal["PublishActivity"] = Field( - "PublishActivity", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class Locus(DandiBaseModel): - identifier: Union[Identifier, List[Identifier]] = Field( - description="Identifier for genotyping locus.", - json_schema_extra={"nskey": "schema"}, - ) - locusType: Optional[str] = Field(None) - schemaKey: Literal["Locus"] = Field( - "Locus", validate_default=True, json_schema_extra={"readOnly": True} - ) - _ldmeta = {"nskey": DANDI_NSKEY} - - -class Allele(DandiBaseModel): - identifier: Union[Identifier, List[Identifier]] = Field( - description="Identifier for genotyping allele.", - json_schema_extra={"nskey": "schema"}, - ) - alleleSymbol: Optional[str] = Field(None) - alleleType: Optional[str] = Field(None) - schemaKey: Literal["Allele"] = Field( - "Allele", validate_default=True, json_schema_extra={"readOnly": True} - ) - _ldmeta = {"nskey": DANDI_NSKEY} - - -class GenotypeInfo(DandiBaseModel): - locus: Locus = Field(description="Locus at which information was extracted.") - alleles: List[Allele] = Field(description="Information about alleles at the locus.") - wasGeneratedBy: Optional[List["Session"]] = Field( - None, - description="Information about session activity used to determine genotype.", - json_schema_extra={"nskey": "prov"}, - ) - schemaKey: Literal["GenotypeInfo"] = Field( - "GenotypeInfo", validate_default=True, json_schema_extra={"readOnly": True} - ) - _ldmeta = {"nskey": DANDI_NSKEY} - - -class RelatedParticipant(DandiBaseModel): - identifier: Optional[Identifier] = Field( - None, json_schema_extra={"nskey": "schema"} - ) - name: Optional[str] = Field( - None, - title="Name of the participant or subject", - json_schema_extra={"nskey": "schema"}, - ) - url: Optional[AnyHttpUrl] = Field( - None, - title="URL of the related participant or subject", - json_schema_extra={"nskey": "schema"}, - ) - relation: ParticipantRelationType = Field( - title="Participant or subject relation", - description="Indicates how the current participant or subject is related " - "to the other participant or subject. This relation should " - "satisfy: Participant/Subject relatedParticipant/Subject.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - schemaKey: Literal["RelatedParticipant"] = Field( - "RelatedParticipant", - validate_default=True, - json_schema_extra={"readOnly": True}, - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], - "rdfs:comment": "Another participant or subject related to the current " - "participant or subject (e.g., another parent, sibling, child).", - "nskey": DANDI_NSKEY, - } - - -class Participant(DandiBaseModel): - """Description about the Participant or Subject studied. - - The Participant or Subject can be any individual or synthesized Agent. The - properties of the Participant or Subject refers to information at the timepoint - when the Participant or Subject engaged in the production of data being described. - """ - - identifier: Identifier = Field(json_schema_extra={"nskey": "schema"}) - altName: Optional[List[Identifier]] = Field( - None, json_schema_extra={"nskey": DANDI_NSKEY} - ) - - strain: Optional[StrainType] = Field( - None, - description="Identifier for the strain of the participant or subject.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - cellLine: Optional[Identifier] = Field( - None, - description="Cell line associated with the participant or subject.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - vendor: Optional[Organization] = Field( - None, json_schema_extra={"nskey": DANDI_NSKEY} - ) - age: Optional[PropertyValue] = Field( - None, - description="A representation of age using ISO 8601 duration. This " - "should include a valueReference if anything other than " - "date of birth is used.", - json_schema_extra={"nskey": DANDI_NSKEY, "rangeIncludes": "schema:Duration"}, - ) - - sex: Optional[SexType] = Field( - None, - description="Identifier for sex of the participant or subject if " - "available. (e.g. from OBI)", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - genotype: Optional[Union[List[GenotypeInfo], Identifier]] = Field( - None, - description="Genotype descriptor of participant or subject if available", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - species: Optional[SpeciesType] = Field( - None, - description="An identifier indicating the taxonomic classification of " - "the participant or subject.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - disorder: Optional[List[Disorder]] = Field( - None, - description="Any current diagnosed disease or disorder associated with " - "the participant or subject.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - - relatedParticipant: Optional[List[RelatedParticipant]] = Field( - None, - description="Information about related participants or subjects in a " - "study or across studies.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - sameAs: Optional[List[Identifier]] = Field( - None, - description="An identifier to link participants or subjects across datasets.", - json_schema_extra={"nskey": "schema"}, - ) - schemaKey: Literal["Participant"] = Field( - "Participant", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["prov:Agent"], - "rdfs:label": "Information about the participant or subject.", - "nskey": DANDI_NSKEY, - } - - -class BioSample(DandiBaseModel): - """Description of the sample that was studied""" - - identifier: Identifier = Field(json_schema_extra={"nskey": "schema"}) - sampleType: SampleType = Field( - description="Identifier for the sample characteristics (e.g., from OBI, Encode).", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - assayType: Optional[List[AssayType]] = Field( - None, - description="Identifier for the assay(s) used (e.g., OBI).", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - anatomy: Optional[List[Anatomy]] = Field( - None, - description="Identifier for what organ the sample belongs " - "to. Use the most specific descriptor from sources such as UBERON.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - - wasDerivedFrom: Optional[List["BioSample"]] = Field( - None, - description="Describes the hierarchy of sample derivation or aggregation.", - json_schema_extra={"nskey": "prov"}, - ) - wasAttributedTo: Optional[List[Participant]] = Field( - None, - description="Participant(s) or Subject(s) associated with this sample.", - json_schema_extra={"nskey": "prov"}, - ) - sameAs: Optional[List[Identifier]] = Field( - None, json_schema_extra={"nskey": "schema"} - ) - hasMember: Optional[List[Identifier]] = Field( - None, json_schema_extra={"nskey": "prov"} - ) - schemaKey: Literal["BioSample"] = Field( - "BioSample", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:Thing", "prov:Entity"], - "rdfs:label": "Information about the biosample.", - "nskey": DANDI_NSKEY, - } - - -# This is mostly not needed at all since self-referencing models -# are automatically resolved by Pydantic in a pretty consistent way even in Pydantic V1 -# https://docs.pydantic.dev/1.10/usage/postponed_annotations/#self-referencing-models -# and continue to be so in Pydantic V2 -# https://docs.pydantic.dev/latest/concepts/postponed_annotations/#self-referencing-or-recursive-models -BioSample.model_rebuild() - - -class CommonModel(DandiBaseModel): - schemaVersion: str = Field( - default=DANDI_SCHEMA_VERSION, - json_schema_extra={"readOnly": True, "nskey": "schema"}, - ) - name: Optional[str] = Field( - None, - title="Title", - description="The name of the item.", - max_length=150, - json_schema_extra={"nskey": "schema"}, - ) - description: Optional[str] = Field( - None, - description="A description of the item.", - json_schema_extra={"nskey": "schema"}, - ) - contributor: Optional[ - List[Annotated[Union[Person, Organization], Field(discriminator="schemaKey")]] - ] = Field( - None, - title="Contributors", - description="Contributors to this item: persons or organizations.", - json_schema_extra={"nskey": "schema"}, - ) - about: Optional[ - List[ - Annotated[ - Union[Disorder, Anatomy, GenericType], Field(discriminator="schemaKey") - ] - ] - ] = Field( - None, - title="Subject matter of the dataset", - description="The subject matter of the content, such as disorders, brain anatomy.", - json_schema_extra={"nskey": "schema"}, - ) - studyTarget: Optional[List[str]] = Field( - None, - description="Objectives or specific questions of the study.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - license: Optional[List[LicenseType]] = Field( - None, - description="Licenses associated with the item. DANDI only supports a " - "subset of Creative Commons Licenses (creativecommons.org) " - "applicable to datasets.", - json_schema_extra={"nskey": "schema"}, - ) - protocol: Optional[List[AnyHttpUrl]] = Field( - None, - description="A list of persistent URLs describing the protocol (e.g. " - "protocols.io, or other DOIs).", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - ethicsApproval: Optional[List[EthicsApproval]] = Field( - None, title="Ethics approvals", json_schema_extra={"nskey": DANDI_NSKEY} - ) - keywords: Optional[List[str]] = Field( - None, - description="Keywords used to describe this content.", - json_schema_extra={"nskey": "schema"}, - ) - acknowledgement: Optional[str] = Field( - None, - description="Any acknowledgments not covered by contributors or external resources.", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - - # Linking to this dandiset or the larger thing - access: List[AccessRequirements] = Field( - title="Access information", - default_factory=lambda: [AccessRequirements(status=AccessType.OpenAccess)], - json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True}, - ) - url: Optional[AnyHttpUrl] = Field( - None, - description="permalink to the item", - json_schema_extra={"readOnly": True, "nskey": "schema"}, - ) - repository: Optional[AnyHttpUrl] = Field( - default=_INSTANCE_CONFIG.instance_url, - description="location of the item", - json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True}, - ) - relatedResource: Optional[List[Resource]] = Field( - None, json_schema_extra={"nskey": DANDI_NSKEY} - ) - - wasGeneratedBy: Optional[Sequence[Activity]] = Field( - None, json_schema_extra={"nskey": "prov"} - ) - schemaKey: str = Field( - "CommonModel", validate_default=True, json_schema_extra={"readOnly": True} - ) - - -class Dandiset(CommonModel): - """A body of structured information describing a DANDI dataset.""" - - model_config = ConfigDict(extra="allow") - - @field_validator("contributor") - @classmethod - def contributor_musthave_contact( - cls, values: List[Union[Person, Organization]] - ) -> List[Union[Person, Organization]]: - contacts = [] - for val in values: - if val.roleName and RoleType.ContactPerson in val.roleName: - contacts.append(val) - if len(contacts) == 0: - raise ValueError("At least one contributor must have role ContactPerson") - return values - - id: str = Field( - description="Uniform resource identifier", - pattern=( - rf"^({ID_PATTERN}|{ID_PATTERN.lower()}):\d{{6}}(/(draft|{VERSION_NUM_PATTERN}))$" - ), - json_schema_extra={"readOnly": True}, - ) - - identifier: DANDI = Field( - title="Dandiset identifier", - description="A Dandiset identifier that can be resolved by identifiers.org.", - pattern=rf"^{ID_PATTERN}:\d{{6}}$", - json_schema_extra={"readOnly": True, "nskey": "schema"}, - ) - - sameAs: Annotated[ - Optional[ - list[ - Annotated[ - str, - StringConstraints( - pattern=( - rf"^dandi://{UNVENDORED_ID_PATTERN}/\d{{6}}" - rf"(@(draft|{VERSION_NUM_PATTERN}))?(/\S+)?$" - ) - ), - ] - ] - ], - Field( - default=None, - description="Known DANDI URLs of the Dandiset at other DANDI instances.", - json_schema_extra={"nskey": "schema"}, - ), - ] - - name: str = Field( - title="Dandiset title", - description="A title associated with the Dandiset.", - max_length=150, - json_schema_extra={"nskey": "schema"}, - ) - description: str = Field( - description="A description of the Dandiset", - max_length=10000, - json_schema_extra={"nskey": "schema"}, - ) - contributor: List[ - Annotated[Union[Person, Organization], Field(discriminator="schemaKey")] - ] = Field( - title="Dandiset contributors", - description="People or Organizations that have contributed to this Dandiset.", - json_schema_extra={"nskey": "schema"}, - min_length=1, - ) - dateCreated: Optional[datetime] = Field( - None, - json_schema_extra={"nskey": "schema", "readOnly": True}, - title="Dandiset creation date and time.", - ) - dateModified: Optional[datetime] = Field( - None, - json_schema_extra={"nskey": "schema", "readOnly": True}, - title="Last modification date and time.", - ) - - license: List[LicenseType] = Field( - min_length=1, - description="Licenses associated with the item. DANDI only supports a " - "subset of Creative Commons Licenses (creativecommons.org) " - "applicable to datasets.", - json_schema_extra={"nskey": "schema"}, - ) - - citation: str = Field(json_schema_extra={"readOnly": True, "nskey": "schema"}) - - # From assets - assetsSummary: AssetsSummary = Field( - json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True} - ) - - # From server (requested by users even for drafts) - manifestLocation: List[AnyHttpUrl] = Field( - min_length=1, json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True} - ) - - version: str = Field(json_schema_extra={"nskey": "schema", "readOnly": True}) - - # Publication-related fields. A non-``None`` ``datePublished`` marks the - # record as published; ``check_publication_status`` enforces the rules. - url: Optional[AnyHttpUrl] = Field( - None, - description="Permalink to the Dandiset.", - json_schema_extra={"readOnly": True, "nskey": "schema"}, - ) - doi: Optional[str] = Field( - None, - title="DOI", - pattern=DANDI_DOI_PATTERN, - json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY}, - ) - """The DOI of the published Dandiset. - - The empty string indicates that there is no DOI for the published Dandiset; - it is set automatically for a published Dandiset on a DANDI instance with no - configured DOI prefix. - """ - publishedBy: Optional[Union[AnyHttpUrl, PublishActivity]] = Field( - None, - description="The URL should contain the provenance of the publishing process.", - json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY}, - ) - datePublished: Optional[datetime] = Field( - None, json_schema_extra={"readOnly": True, "nskey": "schema"} - ) - releaseNotes: Optional[str] = Field( - None, - description="The description of the release", - json_schema_extra={"readOnly": True, "nskey": "schema"}, - ) - - wasGeneratedBy: Optional[Sequence[Project]] = Field( - None, - title="Associated projects", - description="Project(s) that generated this Dandiset.", - json_schema_extra={"nskey": "prov"}, - ) - - schemaKey: Literal["Dandiset"] = Field( - "Dandiset", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:Dataset", "prov:Entity"], - "rdfs:label": "Information about the dataset", - "nskey": DANDI_NSKEY, - } - - @model_validator(mode="after") - def check_publication_status(self) -> Self: - """Enforce publication coherence keyed on ``datePublished``. - - A non-``None`` ``datePublished`` marks the record as published and - triggers the published-Dandiset requirements; otherwise the publication-only - fields must be absent. Each violation is reported against its own field. - """ - line_errors: list[InitErrorDetails] = [] - - def err(field: str, msg: str) -> None: - line_errors.append( - InitErrorDetails( - type="value_error", - loc=(field,), - input=getattr(self, field), - ctx={"error": msg}, - ) - ) - - if self.datePublished is None: - for name in ("doi", "publishedBy", "releaseNotes"): - if getattr(self, name) is not None: - err(name, f"{name} is not allowed unless datePublished is set") - else: - if self.publishedBy is None: - err("publishedBy", "publishedBy is required for a published Dandiset") - if self.url is None: - err("url", "url is required for a published Dandiset") - elif not re.match(PUBLISHED_VERSION_URL_PATTERN, str(self.url)): - err( - "url", f'url does not match regex "{PUBLISHED_VERSION_URL_PATTERN}"' - ) - # Stricter than the ``id`` field pattern, which also accepts - # ``/draft`` and a lowercase prefix; only a published version id - # passes here. - if not re.match(DANDI_PUBID_PATTERN, self.id): - err( - "id", - f'id "{self.id}" does not match the published-Dandiset pattern ' - f'"{DANDI_PUBID_PATTERN}"', - ) - if ( - self.assetsSummary.numberOfBytes == 0 - or self.assetsSummary.numberOfFiles == 0 - ): - err( - "assetsSummary", - "A Dandiset containing no files or zero bytes is not publishable", - ) - if self.doi is None: - if _INSTANCE_CONFIG.doi_prefix is None: - self.doi = "" - else: - err("doi", "doi is required for a published Dandiset") - if line_errors: - raise _CoreValidationError.from_exception_data( - self.__class__.__name__, line_errors - ) - return self - - -class BareAsset(CommonModel): - """Metadata used to describe an asset anywhere (local or server). - - Derived from C2M2 (Level 0 and 1) and schema.org - """ - - contentSize: ByteSizeJsonSchema = Field(json_schema_extra={"nskey": "schema"}) - encodingFormat: Union[AnyHttpUrl, str] = Field( - title="File encoding format", json_schema_extra={"nskey": "schema"} - ) - digest: Dict[DigestType, str] = Field( - title="A map of dandi digests to their values", - json_schema_extra={"nskey": DANDI_NSKEY}, - ) - path: str = Field(json_schema_extra={"nskey": DANDI_NSKEY}) - - dateModified: Optional[datetime] = Field( - None, - json_schema_extra={"nskey": "schema"}, - title="Asset (file or metadata) modification date and time", - ) - blobDateModified: Optional[datetime] = Field( - None, - json_schema_extra={"nskey": DANDI_NSKEY}, - title="Asset file modification date and time.", - ) - # overload to restrict with max_items=1 - access: List[AccessRequirements] = Field( - title="Access information", - default_factory=lambda: [AccessRequirements(status=AccessType.OpenAccess)], - json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True}, - max_length=1, - ) - - # this is from C2M2 level 1 - using EDAM vocabularies - in our case we would - # need to come up with things for neurophys - # TODO: waiting on input - dataType: Optional[AnyHttpUrl] = Field( - None, json_schema_extra={"nskey": DANDI_NSKEY} - ) - - sameAs: Optional[List[AnyHttpUrl]] = Field( - None, json_schema_extra={"nskey": "schema"} - ) - - # TODO - approach: Optional[List[ApproachType]] = Field( - None, json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY} - ) - measurementTechnique: Optional[List[MeasurementTechniqueType]] = Field( - None, json_schema_extra={"readOnly": True, "nskey": "schema"} - ) - variableMeasured: Optional[List[PropertyValue]] = Field( - None, json_schema_extra={"readOnly": True, "nskey": "schema"} - ) - - wasDerivedFrom: Optional[List[BioSample]] = Field( - None, json_schema_extra={"nskey": "prov"} - ) - wasAttributedTo: Optional[List[Participant]] = Field( - None, - description="Associated participant(s) or subject(s).", - json_schema_extra={"nskey": "prov"}, - ) - wasGeneratedBy: Optional[List[Union[Session, Project, Activity]]] = Field( - None, - title="Name of the session, project or activity.", - description="Describe the session, project or activity that generated this asset.", - json_schema_extra={"nskey": "prov"}, - ) - - schemaKey: Literal["BareAsset"] = Field( - "BareAsset", validate_default=True, json_schema_extra={"readOnly": True} - ) - - _ldmeta = { - "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], - "rdfs:label": "Information about the asset", - "nskey": DANDI_NSKEY, - } - - @field_validator("digest") - @classmethod - def digest_check( - cls, v: Dict[DigestType, str], info: ValidationInfo - ) -> Dict[DigestType, str]: - values = info.data - if values.get("encodingFormat") == "application/x-zarr": - if DigestType.dandi_zarr_checksum not in v: - raise ValueError("A zarr asset must have a zarr checksum.") - if v.get(DigestType.dandi_etag): - raise ValueError("Digest cannot have both etag and zarr checksums.") - digest = v[DigestType.dandi_zarr_checksum] - try: - chksum = ZarrDirectoryDigest.parse(digest) - except InvalidZarrChecksum: - raise ValueError( - "Digest must have an appropriate dandi-zarr-checksum value." - f" Got {digest}" - ) - zarr_size = chksum.size - content_size = values.get("contentSize") - if content_size != zarr_size: - raise ValueError( - f"contentSize {content_size} is not equal to the checksum size {zarr_size}." - ) - else: - if DigestType.dandi_etag not in v: - raise ValueError("A non-zarr asset must have a dandi-etag.") - if v.get(DigestType.dandi_zarr_checksum): - raise ValueError("Digest cannot have both etag and zarr checksums.") - digest = v[DigestType.dandi_etag] - if not re.fullmatch(DandiETag.REGEX, digest): - raise ValueError( - f"Digest must have an appropriate dandi-etag value. " - f"Got {digest}" - ) - return v - - -class Asset(BareAsset): - """Metadata used to describe an asset on the server.""" - - # A non-``None`` ``datePublished`` marks the asset as published; see - # ``check_publication_status`` for the rules that then apply. - - # all of the following are set by server - id: str = Field( - json_schema_extra={"readOnly": True}, description="Uniform resource identifier." - ) - identifier: UUID4 = Field(json_schema_extra={"readOnly": True, "nskey": "schema"}) - contentUrl: List[AnyHttpUrl] = Field( - json_schema_extra={"readOnly": True, "nskey": "schema"} - ) - - # Publication-related fields. Present only on a published asset, i.e. when - # ``datePublished`` is set. - publishedBy: Optional[Union[AnyHttpUrl, PublishActivity]] = Field( - None, - description="The URL should contain the provenance of the publishing process.", - json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY}, - ) - datePublished: Optional[datetime] = Field( - None, json_schema_extra={"readOnly": True, "nskey": "schema"} - ) - - # mypy flags the narrowed Literal as an incompatible override of - # BareAsset's, but pydantic allows it and ensure_schemakey pins each - # instance to its class name at runtime. - schemaKey: Literal["Asset"] = Field( # type: ignore[assignment] - "Asset", validate_default=True, json_schema_extra={"readOnly": True} - ) - - @model_validator(mode="after") - def check_publication_status(self) -> Self: - """Enforce publication coherence keyed on ``datePublished``. - - A non-``None`` ``datePublished`` marks the asset as published and - triggers the published-asset requirements; otherwise ``publishedBy`` - must be absent. Each violation is reported against its own field. - """ - line_errors: list[InitErrorDetails] = [] - - def err(field: str, msg: str) -> None: - line_errors.append( - InitErrorDetails( - type="value_error", - loc=(field,), - input=getattr(self, field), - ctx={"error": msg}, - ) - ) - - if self.datePublished is None: - if self.publishedBy is not None: - err( - "publishedBy", - "publishedBy is not allowed unless datePublished is set", - ) - else: - if self.publishedBy is None: - err("publishedBy", "publishedBy is required for a published asset") - if not re.match(ASSET_UUID_PATTERN, self.id): - err( - "id", - f'id "{self.id}" does not match the published-asset pattern ' - f'"{ASSET_UUID_PATTERN}"', - ) - if self.encodingFormat != "application/x-zarr": - if DigestType.sha2_256 not in self.digest: - err("digest", "A non-zarr asset must have a sha2_256.") - else: - sha2_256_digest = self.digest[DigestType.sha2_256] - if not re.fullmatch(SHA256_PATTERN, sha2_256_digest): - err( - "digest", - "Digest must have an appropriate sha2_256 value. " - f"Got {sha2_256_digest}", - ) - if line_errors: - raise _CoreValidationError.from_exception_data( - self.__class__.__name__, line_errors - ) - return self +# TODO: temporary imports of consts etc which might need to be 'redone' +# so we do not duplicate them -# ``PublishedDandiset`` and ``PublishedAsset`` were consolidated into -# ``Dandiset`` and ``Asset`` respectively: a record is "published" when its -# ``datePublished`` is set (see each class's ``check_publication_status``). -# These names are kept as deprecated aliases for backward compatibility and -# will be removed in a future release. -PublishedDandiset = Dandiset -PublishedAsset = Asset +# Deprecated aliases mirroring the ones `models_orig.py` keeps for backward +# compatibility, `PublishedDandiset` and `PublishedAsset` having been consolidated +# into `Dandiset` and `Asset` respectively. `metadata.SCHEMA_MAP` still names them, +# so `publish_model_schemata` needs them to resolve. Temporary: remove these after the +# follow-up to dandi/dandi-schema#419 that drops the aliases from `models_orig.py`. +PublishedDandiset = Dandiset # noqa: F405 +PublishedAsset = Asset # noqa: F405 -def get_schema_version() -> str: - return DANDI_SCHEMA_VERSION +# TODO: do the extra tune ups like linking extra validations etc, +# potentially copied from models_orig.py diff --git a/dandischema/models.yaml b/dandischema/models.yaml new file mode 100644 index 00000000..0b4977e2 --- /dev/null +++ b/dandischema/models.yaml @@ -0,0 +1,1468 @@ +name: dandi-schema +status: eunal:concept-status/DRAFT +id: https://schema.dandiarchive.org/s/dandi/v0.7 +version: 0.7.0 +imports: +- linkml:types +prefixes: + dandiasset: + prefix_reference: http://dandiarchive.org/asset/ + DANDI: + prefix_reference: http://dandiarchive.org/dandiset/ + dandi: + prefix_reference: http://schema.dandiarchive.org/ + dcite: + prefix_reference: http://schema.dandiarchive.org/datacite/ + dct: + prefix_reference: http://purl.org/dc/terms/ + linkml: + prefix_reference: https://w3id.org/linkml/ + nidm: + prefix_reference: http://purl.org/nidash/nidm# + ORCID: + prefix_reference: https://orcid.org/ + owl: + prefix_reference: http://www.w3.org/2002/07/owl# + PATO: + prefix_reference: http://purl.obolibrary.org/obo/PATO_ + pav: + prefix_reference: http://purl.org/pav/ + prov: + prefix_reference: http://www.w3.org/ns/prov# + rdfa: + prefix_reference: http://www.w3.org/ns/rdfa# + rdf: + prefix_reference: http://www.w3.org/1999/02/22-rdf-syntax-ns# + rdfs: + prefix_reference: http://www.w3.org/2000/01/rdf-schema# + ROR: + prefix_reference: https://ror.org/ + RRID: + prefix_reference: 'https://scicrunch.org/resolver/RRID:' + rs: + prefix_reference: http://schema.repronim.org/ + schema: + prefix_reference: http://schema.org/ + skos: + prefix_reference: http://www.w3.org/2004/02/skos/core# + spdx: + prefix_reference: http://spdx.org/licenses/ + uuid: + prefix_reference: http://uuid.repronim.org/ + xsd: + prefix_reference: http://www.w3.org/2001/XMLSchema# +default_prefix: dandi +default_range: string + +enums: + AccessType: + description: An enumeration of access status options + permissible_values: + dandi:OpenAccess: + meaning: dandi:OpenAccess + dandi:EmbargoedAccess: + meaning: dandi:EmbargoedAccess + AgeReferenceType: + description: An enumeration of age reference + permissible_values: + dandi:BirthReference: + meaning: dandi:BirthReference + dandi:GestationalReference: + meaning: dandi:GestationalReference + DigestType: + description: An enumeration of checksum types + permissible_values: + dandi:md5: + meaning: dandi:md5 + dandi:sha1: + meaning: dandi:sha1 + dandi:sha2-256: + meaning: dandi:sha2-256 + dandi:sha3-256: + meaning: dandi:sha3-256 + dandi:blake2b-256: + meaning: dandi:blake2b-256 + dandi:blake3: + meaning: dandi:blake3 + dandi:dandi-etag: + meaning: dandi:dandi-etag + dandi:dandi-zarr-checksum: + meaning: dandi:dandi-zarr-checksum + IdentifierType: + description: An enumeration of identifiers + permissible_values: + dandi:doi: + meaning: dandi:doi + dandi:orcid: + meaning: dandi:orcid + dandi:ror: + meaning: dandi:ror + dandi:dandi: + meaning: dandi:dandi + dandi:rrid: + meaning: dandi:rrid + LicenseType: + description: An enumeration. + permissible_values: + spdx:CC-BY-4.0: + meaning: spdx:CC-BY-4.0 + spdx:CC0-1.0: + meaning: spdx:CC0-1.0 + ParticipantRelationType: + description: An enumeration of participant relations + permissible_values: + dandi:isChildOf: + meaning: dandi:isChildOf + dandi:isParentOf: + meaning: dandi:isParentOf + dandi:isSiblingOf: + meaning: dandi:isSiblingOf + dandi:isMonozygoticTwinOf: + meaning: dandi:isMonozygoticTwinOf + dandi:isDizygoticTwinOf: + meaning: dandi:isDizygoticTwinOf + RelationType: + description: An enumeration of resource relations + permissible_values: + dcite:IsCitedBy: + meaning: dcite:IsCitedBy + dcite:Cites: + meaning: dcite:Cites + dcite:IsSupplementTo: + meaning: dcite:IsSupplementTo + dcite:IsSupplementedBy: + meaning: dcite:IsSupplementedBy + dcite:IsContinuedBy: + meaning: dcite:IsContinuedBy + dcite:Continues: + meaning: dcite:Continues + dcite:Describes: + meaning: dcite:Describes + dcite:IsDescribedBy: + meaning: dcite:IsDescribedBy + dcite:HasMetadata: + meaning: dcite:HasMetadata + dcite:IsMetadataFor: + meaning: dcite:IsMetadataFor + dcite:HasVersion: + meaning: dcite:HasVersion + dcite:IsVersionOf: + meaning: dcite:IsVersionOf + dcite:IsNewVersionOf: + meaning: dcite:IsNewVersionOf + dcite:IsPreviousVersionOf: + meaning: dcite:IsPreviousVersionOf + dcite:IsPartOf: + meaning: dcite:IsPartOf + dcite:HasPart: + meaning: dcite:HasPart + dcite:IsReferencedBy: + meaning: dcite:IsReferencedBy + dcite:References: + meaning: dcite:References + dcite:IsDocumentedBy: + meaning: dcite:IsDocumentedBy + dcite:Documents: + meaning: dcite:Documents + dcite:IsCompiledBy: + meaning: dcite:IsCompiledBy + dcite:Compiles: + meaning: dcite:Compiles + dcite:IsVariantFormOf: + meaning: dcite:IsVariantFormOf + dcite:IsOriginalFormOf: + meaning: dcite:IsOriginalFormOf + dcite:IsIdenticalTo: + meaning: dcite:IsIdenticalTo + dcite:IsReviewedBy: + meaning: dcite:IsReviewedBy + dcite:Reviews: + meaning: dcite:Reviews + dcite:IsDerivedFrom: + meaning: dcite:IsDerivedFrom + dcite:IsSourceOf: + meaning: dcite:IsSourceOf + dcite:IsRequiredBy: + meaning: dcite:IsRequiredBy + dcite:Requires: + meaning: dcite:Requires + dcite:Obsoletes: + meaning: dcite:Obsoletes + dcite:IsObsoletedBy: + meaning: dcite:IsObsoletedBy + dcite:IsPublishedIn: + meaning: dcite:IsPublishedIn + ResourceType: + description: An enumeration of resource types + permissible_values: + dcite:Audiovisual: + meaning: dcite:Audiovisual + dcite:Book: + meaning: dcite:Book + dcite:BookChapter: + meaning: dcite:BookChapter + dcite:Collection: + meaning: dcite:Collection + dcite:ComputationalNotebook: + meaning: dcite:ComputationalNotebook + dcite:ConferencePaper: + meaning: dcite:ConferencePaper + dcite:ConferenceProceeding: + meaning: dcite:ConferenceProceeding + dcite:DataPaper: + meaning: dcite:DataPaper + dcite:Dataset: + meaning: dcite:Dataset + dcite:Dissertation: + meaning: dcite:Dissertation + dcite:Event: + meaning: dcite:Event + dcite:Image: + meaning: dcite:Image + dcite:Instrument: + meaning: dcite:Instrument + dcite:InteractiveResource: + meaning: dcite:InteractiveResource + dcite:Journal: + meaning: dcite:Journal + dcite:JournalArticle: + meaning: dcite:JournalArticle + dcite:Model: + meaning: dcite:Model + dcite:OutputManagementPlan: + meaning: dcite:OutputManagementPlan + dcite:PeerReview: + meaning: dcite:PeerReview + dcite:PhysicalObject: + meaning: dcite:PhysicalObject + dcite:Preprint: + meaning: dcite:Preprint + dcite:Report: + meaning: dcite:Report + dcite:Service: + meaning: dcite:Service + dcite:Software: + meaning: dcite:Software + dcite:Sound: + meaning: dcite:Sound + dcite:Standard: + meaning: dcite:Standard + dcite:StudyRegistration: + meaning: dcite:StudyRegistration + dcite:Text: + meaning: dcite:Text + dcite:Workflow: + meaning: dcite:Workflow + dcite:Other: + meaning: dcite:Other + RoleType: + description: An enumeration of roles + permissible_values: + dcite:Author: + meaning: dcite:Author + dcite:Conceptualization: + meaning: dcite:Conceptualization + dcite:ContactPerson: + meaning: dcite:ContactPerson + dcite:DataCollector: + meaning: dcite:DataCollector + dcite:DataCurator: + meaning: dcite:DataCurator + dcite:DataManager: + meaning: dcite:DataManager + dcite:FormalAnalysis: + meaning: dcite:FormalAnalysis + dcite:FundingAcquisition: + meaning: dcite:FundingAcquisition + dcite:Investigation: + meaning: dcite:Investigation + dcite:Maintainer: + meaning: dcite:Maintainer + dcite:Methodology: + meaning: dcite:Methodology + dcite:Producer: + meaning: dcite:Producer + dcite:ProjectLeader: + meaning: dcite:ProjectLeader + dcite:ProjectManager: + meaning: dcite:ProjectManager + dcite:ProjectMember: + meaning: dcite:ProjectMember + dcite:ProjectAdministration: + meaning: dcite:ProjectAdministration + dcite:Researcher: + meaning: dcite:Researcher + dcite:Resources: + meaning: dcite:Resources + dcite:Software: + meaning: dcite:Software + dcite:Supervision: + meaning: dcite:Supervision + dcite:Validation: + meaning: dcite:Validation + dcite:Visualization: + meaning: dcite:Visualization + dcite:Funder: + meaning: dcite:Funder + dcite:Sponsor: + meaning: dcite:Sponsor + dcite:StudyParticipant: + meaning: dcite:StudyParticipant + dcite:Affiliation: + meaning: dcite:Affiliation + dcite:EthicsApproval: + meaning: dcite:EthicsApproval + dcite:Other: + meaning: dcite:Other + +slots: + about: + description: The subject matter of the content, such as disorders, brain + anatomy. + title: Subject matter of the dataset + range: Any + required: false + multivalued: true + any_of: + - range: Disorder + - range: Anatomy + - range: GenericType + access: + title: Access information + readonly: Read-only for clients; managed by server + range: AccessRequirements + required: false + multivalued: true + acknowledgement: + description: Any acknowledgments not covered by contributors or external + resources. + range: string + required: false + affiliation: + description: An organization that this person is affiliated with. + range: Affiliation + required: false + multivalued: true + age: + description: A representation of age using ISO 8601 duration. This should + include a valueReference if anything other than date of birth is used. + range: PropertyValue + required: false + alleles: + description: Information about alleles at the locus. + range: Allele + required: true + multivalued: true + alleleSymbol: + range: string + required: false + alleleType: + range: string + required: false + altName: + range: string + required: false + multivalued: true + anatomy: + description: Identifier for what organ the sample belongs to. Use the most + specific descriptor from sources such as UBERON. + range: Anatomy + required: false + multivalued: true + approach: + readonly: Read-only for clients; managed by server + range: ApproachType + required: false + multivalued: true + assayType: + description: Identifier for the assay(s) used (e.g., OBI). + range: AssayType + required: false + multivalued: true + assetsSummary: + readonly: Read-only for clients; managed by server + range: AssetsSummary + required: true + awardNumber: + description: Identifier associated with a sponsored or gift award. + title: Identifier for an award + range: string + required: false + blobDateModified: + title: Asset file modification date and time. + range: datetime + required: false + cellLine: + description: Cell line associated with the participant or subject. + range: string + required: false + citation: + readonly: Read-only for clients; managed by server + range: string + required: true + contactPoint: + range: ContactPoint + required: false + contentSize: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, >.' + range: Any + required: true + any_of: + - range: string + pattern: ^\s*(\d*\.?\d+)\s*(\w+)? + - range: integer + minimum_value: 0 + contentUrl: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + readonly: Read-only for clients; managed by server + range: uri + required: true + multivalued: true + pattern: ^(?i:http|https)://[^\s]+$ + contributor: + range: Any + multivalued: true + any_of: + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + range: Person + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + range: Organization + dataStandard: + readonly: Read-only for clients; managed by server + range: StandardsType + required: false + multivalued: true + dataType: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + range: uri + required: false + pattern: ^(?i:http|https)://[^\s]+$ + dateCreated: + title: Dandiset creation date and time. + readonly: Read-only for clients; managed by server + range: datetime + required: false + dateModified: + range: datetime + required: false + datePublished: + readonly: Read-only for clients; managed by server + range: datetime + required: false + description: + range: string + digest: + title: A map of dandi digests to their values + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, >.' + - 'pydantic2linkml: Warning: The translation is incomplete. `dict` types are yet + to be supported.' + required: true + disorder: + description: Any current diagnosed disease or disorder associated with the + participant or subject. + range: Disorder + required: false + multivalued: true + doi: + title: DOI + readonly: Read-only for clients; managed by server + range: string + required: false + pattern: ^(10\.\d{4,}/[a-z][-a-z]*\.\d{6}/\d+\.\d+\.\d+|)$ + dxdate: + description: Dates of diagnosis + title: Dates of diagnosis + range: Any + required: false + multivalued: true + any_of: + - range: date + - range: datetime + email: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, >.' + range: string + required: false + embargoedUntil: + description: Date on which embargo ends. + title: Embargo end date + readonly: Read-only for clients; managed by server + range: date + required: false + encodingFormat: + title: File encoding format + range: Any + required: true + any_of: + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + range: uri + pattern: ^(?i:http|https)://[^\s]+$ + - range: string + endDate: + range: datetime + required: false + ethicsApproval: + title: Ethics approvals + range: EthicsApproval + required: false + multivalued: true + genotype: + description: Genotype descriptor of participant or subject if available + range: Any + required: false + any_of: + - range: GenotypeInfo + multivalued: true + - range: string + hasMember: + range: string + required: false + multivalued: true + id: + readonly: Read-only for clients; managed by server + range: string + identifier: {} + includeInCitation: + title: Include contributor in citation + range: boolean + required: false + keywords: + description: Keywords used to describe this content. + range: string + required: false + multivalued: true + license: + description: Licenses associated with the item. DANDI only supports a subset + of Creative Commons Licenses (creativecommons.org) applicable to datasets. + range: LicenseType + multivalued: true + locus: + description: Locus at which information was extracted. + range: Locus + required: true + locusType: + range: string + required: false + manifestLocation: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + readonly: Read-only for clients; managed by server + range: uri + required: true + multivalued: true + pattern: ^(?i:http|https)://[^\s]+$ + minimum_cardinality: 1 + maxValue: + range: float + required: false + measurementTechnique: + readonly: Read-only for clients; managed by server + range: MeasurementTechniqueType + required: false + multivalued: true + minValue: + range: float + required: false + name: + range: string + numberOfBytes: + readonly: Read-only for clients; managed by server + range: integer + required: true + numberOfCells: + readonly: Read-only for clients; managed by server + range: integer + required: false + numberOfFiles: + readonly: Read-only for clients; managed by server + range: integer + required: true + numberOfSamples: + readonly: Read-only for clients; managed by server + range: integer + required: false + numberOfSubjects: + readonly: Read-only for clients; managed by server + range: integer + required: false + path: + range: string + required: true + propertyID: + description: A commonly used identifier for the characteristic represented + by the property. For example, a known prefix like DOI or a full URL. + range: Any + required: false + any_of: + - range: IdentifierType + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + range: uri + pattern: ^(?i:http|https)://[^\s]+$ + protocol: + description: A list of persistent URLs describing the protocol (e.g. + protocols.io, or other DOIs). + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + range: uri + required: false + multivalued: true + pattern: ^(?i:http|https)://[^\s]+$ + publishedBy: + description: The URL should contain the provenance of the publishing + process. + readonly: Read-only for clients; managed by server + range: Any + required: false + relatedParticipant: + description: Information about related participants or subjects in a study + or across studies. + range: RelatedParticipant + required: false + multivalued: true + relatedResource: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + range: Resource + required: false + multivalued: true + relation: + required: true + releaseNotes: + description: The description of the release + readonly: Read-only for clients; managed by server + range: string + required: false + repository: + required: false + resourceType: + description: The type of resource. + title: Resource type + range: ResourceType + required: false + roleName: + description: Role(s) of the contributor. Multiple roles can be selected. + title: Role + range: RoleType + required: false + multivalued: true + sameAs: + required: false + multivalued: true + sampleType: + description: Identifier for the sample characteristics (e.g., from OBI, + Encode). + range: SampleType + required: true + schemaKey: + readonly: Read-only for clients; managed by server + designates_type: true + range: string + required: true + schemaVersion: + readonly: Read-only for clients; managed by server + ifabsent: string(0.8.0) + range: string + required: false + sex: + description: Identifier for sex of the participant or subject if available. + (e.g. from OBI) + range: SexType + required: false + species: + range: SpeciesType + required: false + startDate: + range: datetime + required: false + status: + description: The access status of the item. + title: Access status + range: AccessType + required: true + strain: + description: Identifier for the strain of the participant or subject. + range: StrainType + required: false + studyTarget: + description: Objectives or specific questions of the study. + range: string + required: false + multivalued: true + unitText: + range: string + required: false + url: + range: uri + required: false + pattern: ^(?i:http|https)://[^\s]+$ + used: + description: A listing of equipment used for the activity. + range: Equipment + required: false + multivalued: true + value: + description: The value associated with this property. + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, >.' + range: Any + required: false + any_of: + - range: Any + - range: Any + multivalued: true + valueReference: + range: PropertyValue + required: false + variableMeasured: + readonly: Read-only for clients; managed by server + required: false + multivalued: true + vendor: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + range: Organization + required: false + version: + range: string + required: true + wasAssociatedWith: + range: Any + required: false + multivalued: true + any_of: + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + range: Person + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + range: Organization + - range: Software + - range: Agent + wasAttributedTo: + range: Participant + required: false + multivalued: true + wasDerivedFrom: + range: BioSample + required: false + multivalued: true + wasGeneratedBy: + required: false + multivalued: true + +classes: + Any: + description: Any object + class_uri: linkml:Any + AccessRequirements: + description: Information about access options for the dataset + is_a: DandiBaseModel + slots: + - contactPoint + - description + - embargoedUntil + - status + slot_usage: + contactPoint: + description: Who or where to look for information about access. + description: + description: Information about access requirements when embargoed or + restricted + required: false + Activity: + description: Information about the Project activity + is_a: DandiBaseModel + slots: + - description + - endDate + - identifier + - name + - startDate + - used + - wasAssociatedWith + slot_usage: + description: + description: The description of the activity. + required: false + identifier: + range: string + required: false + name: + description: The name of the activity. + title: Title + required: true + all_of: + - pattern: ^[\s\S]{,150}\Z + Affiliation: + is_a: DandiBaseModel + slots: + - identifier + - name + slot_usage: + identifier: + description: Use an ror.org identifier for institutions. + title: A ror.org identifier + range: string + required: false + pattern: ^https://ror.org/[a-z0-9]+$ + name: + description: Name of organization + required: true + Agent: + is_a: DandiBaseModel + slots: + - identifier + - name + - url + slot_usage: + identifier: + description: Identifier for an agent. + title: Identifier + range: string + required: false + name: + required: true + url: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + Allele: + is_a: DandiBaseModel + slots: + - alleleSymbol + - alleleType + - identifier + slot_usage: + identifier: + description: Identifier for genotyping allele. + range: Any + required: true + any_of: + - range: string + - range: string + multivalued: true + Anatomy: + description: UBERON or other identifier for anatomical part studied + is_a: BaseType + ApproachType: + description: Identifier for approach used + is_a: BaseType + AssayType: + description: OBI based identifier for the assay(s) used + is_a: BaseType + Asset: + description: Metadata used to describe an asset on the server. + is_a: BareAsset + slots: + - contentUrl + - datePublished + - identifier + - publishedBy + slot_usage: + id: + description: Uniform resource identifier. + required: true + identifier: + readonly: Read-only for clients; managed by server + range: string + required: true + pattern: + ^(?:urn:uuid:)?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$ + publishedBy: + any_of: + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap + validation function, .wrap_val + at 0xADDRESS>.' + range: uri + pattern: ^(?i:http|https)://[^\s]+$ + - range: PublishActivity + AssetsSummary: + description: Summary over assets contained in a dandiset (published or not) + is_a: DandiBaseModel + slots: + - approach + - dataStandard + - measurementTechnique + - numberOfBytes + - numberOfCells + - numberOfFiles + - numberOfSamples + - numberOfSubjects + - species + - variableMeasured + slot_usage: + species: + readonly: Read-only for clients; managed by server + multivalued: true + variableMeasured: + range: string + BareAsset: + description: Metadata used to describe an asset anywhere (local or server). + Derived from C2M2 (Level 0 and 1) and schema.org + is_a: CommonModel + slots: + - approach + - blobDateModified + - contentSize + - dataType + - dateModified + - digest + - encodingFormat + - measurementTechnique + - path + - sameAs + - variableMeasured + - wasAttributedTo + - wasDerivedFrom + slot_usage: + access: + notes: + - 'pydantic2linkml: Unable to express the default factory, + at 0xADDRESS>, in LinkML.' + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + maximum_cardinality: 1 + dateModified: + title: Asset (file or metadata) modification date and time + sameAs: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + range: uri + pattern: ^(?i:http|https)://[^\s]+$ + variableMeasured: + range: PropertyValue + wasAttributedTo: + description: Associated participant(s) or subject(s). + wasGeneratedBy: + description: Describe the session, project or activity that generated + this asset. + title: Name of the session, project or activity. + range: Any + any_of: + - range: Session + - range: Project + - range: Activity + BaseType: + description: Base class for enumerated types + is_a: DandiBaseModel + slots: + - identifier + - name + slot_usage: + identifier: + description: The identifier can be any url or a compact URI, preferably + supported by identifiers.org. + range: Any + required: false + any_of: + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap + validation function, .wrap_val + at 0xADDRESS>.' + range: uri + pattern: ^(?i:http|https)://[^\s]+$ + - range: string + pattern: ^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\._]+$ + name: + description: The name of the item. + required: false + all_of: + - pattern: ^[\s\S]{,150}\Z + BioSample: + description: Description of the sample that was studied + is_a: DandiBaseModel + slots: + - anatomy + - assayType + - hasMember + - identifier + - sameAs + - sampleType + - wasAttributedTo + - wasDerivedFrom + slot_usage: + identifier: + range: string + required: true + sameAs: + range: string + wasAttributedTo: + description: Participant(s) or Subject(s) associated with this sample. + wasDerivedFrom: + description: Describes the hierarchy of sample derivation or + aggregation. + CommonModel: + is_a: DandiBaseModel + slots: + - about + - access + - acknowledgement + - contributor + - description + - ethicsApproval + - keywords + - license + - name + - protocol + - relatedResource + - repository + - schemaVersion + - studyTarget + - url + - wasGeneratedBy + slot_usage: + access: + notes: + - 'pydantic2linkml: Unable to express the default factory, + at 0xADDRESS>, in LinkML.' + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, .' + contributor: + description: 'Contributors to this item: persons or organizations.' + title: Contributors + required: false + description: + description: A description of the item. + required: false + license: + required: false + name: + description: The name of the item. + title: Title + required: false + all_of: + - pattern: ^[\s\S]{,150}\Z + repository: + description: location of the item + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + readonly: Read-only for clients; managed by server + range: uri + pattern: ^(?i:http|https)://[^\s]+$ + url: + description: permalink to the item + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + readonly: Read-only for clients; managed by server + wasGeneratedBy: + range: Activity + ContactPoint: + is_a: DandiBaseModel + slots: + - email + - url + slot_usage: + email: + description: Email address of contact. + url: + description: A Web page to find information on how to contact. + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + Contributor: + is_a: DandiBaseModel + slots: + - awardNumber + - email + - identifier + - includeInCitation + - name + - roleName + - url + slot_usage: + identifier: + description: Use a common identifier such as ORCID (orcid.org) for + people or ROR (ror.org) for institutions. + title: A common identifier + range: string + required: false + includeInCitation: + description: A flag to indicate whether a contributor should be included + when generating a citation for the item. + ifabsent: 'True' + name: + required: false + url: + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + DandiBaseModel: + slots: + - id + - schemaKey + slot_usage: + id: + description: Uniform resource identifier + required: false + Dandiset: + description: A body of structured information describing a DANDI dataset. + is_a: CommonModel + slots: + - assetsSummary + - citation + - dateCreated + - dateModified + - datePublished + - doi + - identifier + - manifestLocation + - publishedBy + - releaseNotes + - sameAs + - version + slot_usage: + contributor: + description: People or Organizations that have contributed to this + Dandiset. + title: Dandiset contributors + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the after validation + function, >.' + required: true + minimum_cardinality: 1 + dateModified: + title: Last modification date and time. + readonly: Read-only for clients; managed by server + description: + description: A description of the Dandiset + required: true + all_of: + - pattern: ^[\s\S]{,10000}\Z + id: + required: true + pattern: ^([A-Z][-A-Z]*|[a-z][-a-z]*):\d{6}(/(draft|\d+\.\d+\.\d+))$ + identifier: + description: A Dandiset identifier that can be resolved by + identifiers.org. + title: Dandiset identifier + readonly: Read-only for clients; managed by server + range: string + required: true + pattern: ^[A-Z][-A-Z]*:\d{6}$ + license: + required: true + minimum_cardinality: 1 + name: + description: A title associated with the Dandiset. + title: Dandiset title + required: true + publishedBy: + any_of: + - notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap + validation function, .wrap_val + at 0xADDRESS>.' + range: uri + pattern: ^(?i:http|https)://[^\s]+$ + - range: PublishActivity + sameAs: + description: Known DANDI URLs of the Dandiset at other DANDI instances. + range: string + pattern: ^dandi://[A-Z][-A-Z]*/\d{6}(@(draft|\d+\.\d+\.\d+))?(/\S+)?$ + url: + description: Permalink to the Dandiset. + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + version: + readonly: Read-only for clients; managed by server + wasGeneratedBy: + description: Project(s) that generated this Dandiset. + title: Associated projects + range: Project + Disorder: + description: Biolink, SNOMED, or other identifier for disorder studied + is_a: BaseType + slots: + - dxdate + Equipment: + is_a: DandiBaseModel + slots: + - description + - identifier + - name + slot_usage: + description: + description: The description of the equipment. + required: false + identifier: + range: string + required: false + name: + description: A name for the equipment. + title: Title + required: true + all_of: + - pattern: ^[\s\S]{,150}\Z + EthicsApproval: + description: Information about ethics committee approval for project + is_a: DandiBaseModel + slots: + - contactPoint + - identifier + slot_usage: + contactPoint: + description: Information about the ethics approval committee. + identifier: + description: Approved Protocol identifier, often a number or + alphanumeric string. + title: Approved protocol identifier + range: string + required: true + GenericType: + description: An object to capture any type for about + is_a: BaseType + GenotypeInfo: + is_a: DandiBaseModel + slots: + - alleles + - locus + - wasGeneratedBy + slot_usage: + wasGeneratedBy: + description: Information about session activity used to determine + genotype. + range: Session + Locus: + is_a: DandiBaseModel + slots: + - identifier + - locusType + slot_usage: + identifier: + description: Identifier for genotyping locus. + range: Any + required: true + any_of: + - range: string + - range: string + multivalued: true + MeasurementTechniqueType: + description: Identifier for measurement technique used + is_a: BaseType + Organization: + is_a: Contributor + slots: + - contactPoint + slot_usage: + contactPoint: + description: Contact for the organization + title: Organization contact information + multivalued: true + identifier: + description: Use an ror.org identifier for institutions. + title: A ror.org identifier + pattern: ^https://ror.org/[a-z0-9]+$ + includeInCitation: + description: A flag to indicate whether a contributor should be included + when generating a citation for the item + ifabsent: 'False' + Participant: + description: Description about the Participant or Subject studied. The + Participant or Subject can be any individual or synthesized Agent. The + properties of the Participant or Subject refers to information at the + timepoint when the Participant or Subject engaged in the production of + data being described. + is_a: DandiBaseModel + slots: + - age + - altName + - cellLine + - disorder + - genotype + - identifier + - relatedParticipant + - sameAs + - sex + - species + - strain + - vendor + slot_usage: + identifier: + range: string + required: true + sameAs: + description: An identifier to link participants or subjects across + datasets. + range: string + species: + description: An identifier indicating the taxonomic classification of + the participant or subject. + Person: + is_a: Contributor + slots: + - affiliation + slot_usage: + identifier: + description: An ORCID (orcid.org) identifier for an individual. + title: An ORCID identifier + pattern: ^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$ + name: + description: 'Use the format: familyname, given names ...' + title: 'Use Last, First. Example: Lovelace, Augusta Ada' + required: true + pattern: ^([\w\s\-\.']+),\s+([\w\s\-\.']+)$ + Project: + is_a: Activity + slot_usage: + description: + description: A brief description of the project. + name: + description: The name of the project that generated this Dandiset or + asset. + title: Name of project + PropertyValue: + is_a: DandiBaseModel + slots: + - maxValue + - minValue + - propertyID + - unitText + - value + - valueReference + PublishActivity: + is_a: Activity + RelatedParticipant: + is_a: DandiBaseModel + slots: + - identifier + - name + - relation + - url + slot_usage: + identifier: + range: string + required: false + name: + title: Name of the participant or subject + required: false + relation: + description: 'Indicates how the current participant or subject is related + to the other participant or subject. This relation should satisfy: Participant/Subject + relatedParticipant/Subject.' + title: Participant or subject relation + range: ParticipantRelationType + url: + title: URL of the related participant or subject + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + Resource: + is_a: DandiBaseModel + slots: + - identifier + - name + - relation + - repository + - resourceType + - url + slot_usage: + identifier: + range: string + required: false + name: + title: A title of the resource + required: false + relation: + description: 'Indicates how the resource is related to the dataset. This relation + should satisfy: dandiset resource.' + title: Resource relation + range: RelationType + repository: + description: Name of the repository in which the resource is housed. + title: Name of the repository + range: string + url: + title: URL of the resource + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + SampleType: + description: OBI based identifier for the sample type used + is_a: BaseType + Session: + is_a: Activity + slot_usage: + description: + description: A brief description of the session. + name: + description: The name of the logical session associated with the asset. + title: Name of session + SexType: + description: Identifier for the sex of the sample + is_a: BaseType + Software: + is_a: DandiBaseModel + slots: + - identifier + - name + - url + - version + slot_usage: + identifier: + description: RRID of the software from scicrunch.org. + title: Research resource identifier + range: string + required: false + pattern: ^RRID:.* + name: + required: true + url: + description: Web page for the software. + notes: + - 'pydantic2linkml: Unable to translate the logic contained in the wrap validation + function, .wrap_val + at 0xADDRESS>.' + SpeciesType: + description: Identifier for species of the sample + is_a: BaseType + StandardsType: + description: Identifier for data standard used + is_a: BaseType + StrainType: + description: Identifier for the strain of the sample + is_a: BaseType diff --git a/dandischema/models_importstab.py b/dandischema/models_importstab.py deleted file mode 100644 index 7a98b607..00000000 --- a/dandischema/models_importstab.py +++ /dev/null @@ -1,21 +0,0 @@ -from .models_linkml import * # noqa: F401,F403 -from .models_orig import ( # noqa: F401 - DANDI_INSTANCE_URL_PATTERN, - DANDI_NSKEY, - get_schema_version, -) - -# TODO: temporary imports of consts etc which might need to be 'redone' -# so we do not duplicate them - -# Deprecated aliases mirroring the ones `models_orig.py` keeps for backward -# compatibility, `PublishedDandiset` and `PublishedAsset` having been consolidated -# into `Dandiset` and `Asset` respectively. `metadata.SCHEMA_MAP` still names them, -# so `publish_model_schemata` needs them to resolve. Temporary: remove these after the -# follow-up to dandi/dandi-schema#419 that drops the aliases from `models_orig.py`. -PublishedDandiset = Dandiset # noqa: F405 -PublishedAsset = Asset # noqa: F405 - - -# TODO: do the extra tune ups like linking extra validations etc, -# potentially copied from models_orig.py diff --git a/dandischema/models_linkml.py b/dandischema/models_linkml.py new file mode 100644 index 00000000..db15f2a7 --- /dev/null +++ b/dandischema/models_linkml.py @@ -0,0 +1,6530 @@ +from __future__ import annotations + +from datetime import date, datetime, time +from decimal import Decimal +from enum import Enum +import re +import sys +from typing import Any, ClassVar, Literal, Optional, Union + +from pydantic import ( + BaseModel, + ConfigDict, + Field, + RootModel, + SerializationInfo, + SerializerFunctionWrapHandler, + field_validator, + model_serializer, +) + +metamodel_version = "1.11.0" +version = "0.7.0" + + +class ConfiguredBaseModel(BaseModel): + model_config = ConfigDict( + serialize_by_alias=True, + validate_by_name=True, + validate_assignment=True, + validate_default=True, + extra="forbid", + arbitrary_types_allowed=True, + use_enum_values=True, + strict=False, + ) + + +class LinkMLMeta(RootModel): + root: dict[str, Any] = {} + model_config = ConfigDict(frozen=True) + + def __getattr__(self, key: str): + return getattr(self.root, key) + + def __getitem__(self, key: str): + return self.root[key] + + def __setitem__(self, key: str, value): + self.root[key] = value + + def __contains__(self, key: str) -> bool: + return key in self.root + + +linkml_meta = LinkMLMeta( + { + "default_prefix": "dandi", + "default_range": "string", + "id": "https://schema.dandiarchive.org/s/dandi/v0.7", + "imports": ["linkml:types"], + "name": "dandi-schema", + "prefixes": { + "DANDI": { + "prefix_prefix": "DANDI", + "prefix_reference": "http://dandiarchive.org/dandiset/", + }, + "ORCID": { + "prefix_prefix": "ORCID", + "prefix_reference": "https://orcid.org/", + }, + "PATO": { + "prefix_prefix": "PATO", + "prefix_reference": "http://purl.obolibrary.org/obo/PATO_", + }, + "ROR": {"prefix_prefix": "ROR", "prefix_reference": "https://ror.org/"}, + "RRID": { + "prefix_prefix": "RRID", + "prefix_reference": "https://scicrunch.org/resolver/RRID:", + }, + "dandi": { + "prefix_prefix": "dandi", + "prefix_reference": "http://schema.dandiarchive.org/", + }, + "dandiasset": { + "prefix_prefix": "dandiasset", + "prefix_reference": "http://dandiarchive.org/asset/", + }, + "dcite": { + "prefix_prefix": "dcite", + "prefix_reference": "http://schema.dandiarchive.org/datacite/", + }, + "dct": { + "prefix_prefix": "dct", + "prefix_reference": "http://purl.org/dc/terms/", + }, + "linkml": { + "prefix_prefix": "linkml", + "prefix_reference": "https://w3id.org/linkml/", + }, + "nidm": { + "prefix_prefix": "nidm", + "prefix_reference": "http://purl.org/nidash/nidm#", + }, + "owl": { + "prefix_prefix": "owl", + "prefix_reference": "http://www.w3.org/2002/07/owl#", + }, + "pav": {"prefix_prefix": "pav", "prefix_reference": "http://purl.org/pav/"}, + "prov": { + "prefix_prefix": "prov", + "prefix_reference": "http://www.w3.org/ns/prov#", + }, + "rdf": { + "prefix_prefix": "rdf", + "prefix_reference": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + }, + "rdfa": { + "prefix_prefix": "rdfa", + "prefix_reference": "http://www.w3.org/ns/rdfa#", + }, + "rdfs": { + "prefix_prefix": "rdfs", + "prefix_reference": "http://www.w3.org/2000/01/rdf-schema#", + }, + "rs": { + "prefix_prefix": "rs", + "prefix_reference": "http://schema.repronim.org/", + }, + "schema": { + "prefix_prefix": "schema", + "prefix_reference": "http://schema.org/", + }, + "skos": { + "prefix_prefix": "skos", + "prefix_reference": "http://www.w3.org/2004/02/skos/core#", + }, + "spdx": { + "prefix_prefix": "spdx", + "prefix_reference": "http://spdx.org/licenses/", + }, + "uuid": { + "prefix_prefix": "uuid", + "prefix_reference": "http://uuid.repronim.org/", + }, + "xsd": { + "prefix_prefix": "xsd", + "prefix_reference": "http://www.w3.org/2001/XMLSchema#", + }, + }, + "source_file": "dandischema/models.yaml", + "status": "eunal:concept-status/DRAFT", + } +) + + +class AccessType(str, Enum): + """ + An enumeration of access status options + """ + + OpenAccess = "dandi:OpenAccess" + EmbargoedAccess = "dandi:EmbargoedAccess" + + +class AgeReferenceType(str, Enum): + """ + An enumeration of age reference + """ + + BirthReference = "dandi:BirthReference" + GestationalReference = "dandi:GestationalReference" + + +class DigestType(str, Enum): + """ + An enumeration of checksum types + """ + + md5 = "dandi:md5" + sha1 = "dandi:sha1" + sha2_256 = "dandi:sha2-256" + sha3_256 = "dandi:sha3-256" + blake2b_256 = "dandi:blake2b-256" + blake3 = "dandi:blake3" + dandi_etag = "dandi:dandi-etag" + dandi_zarr_checksum = "dandi:dandi-zarr-checksum" + + +class IdentifierType(str, Enum): + """ + An enumeration of identifiers + """ + + doi = "dandi:doi" + orcid = "dandi:orcid" + ror = "dandi:ror" + dandi = "dandi:dandi" + rrid = "dandi:rrid" + + +class LicenseType(str, Enum): + """ + An enumeration. + """ + + CC_BY_4FULL_STOP0 = "spdx:CC-BY-4.0" + CC0_1FULL_STOP0 = "spdx:CC0-1.0" + + +class ParticipantRelationType(str, Enum): + """ + An enumeration of participant relations + """ + + isChildOf = "dandi:isChildOf" + isParentOf = "dandi:isParentOf" + isSiblingOf = "dandi:isSiblingOf" + isMonozygoticTwinOf = "dandi:isMonozygoticTwinOf" + isDizygoticTwinOf = "dandi:isDizygoticTwinOf" + + +class RelationType(str, Enum): + """ + An enumeration of resource relations + """ + + IsCitedBy = "dcite:IsCitedBy" + Cites = "dcite:Cites" + IsSupplementTo = "dcite:IsSupplementTo" + IsSupplementedBy = "dcite:IsSupplementedBy" + IsContinuedBy = "dcite:IsContinuedBy" + Continues = "dcite:Continues" + Describes = "dcite:Describes" + IsDescribedBy = "dcite:IsDescribedBy" + HasMetadata = "dcite:HasMetadata" + IsMetadataFor = "dcite:IsMetadataFor" + HasVersion = "dcite:HasVersion" + IsVersionOf = "dcite:IsVersionOf" + IsNewVersionOf = "dcite:IsNewVersionOf" + IsPreviousVersionOf = "dcite:IsPreviousVersionOf" + IsPartOf = "dcite:IsPartOf" + HasPart = "dcite:HasPart" + IsReferencedBy = "dcite:IsReferencedBy" + References = "dcite:References" + IsDocumentedBy = "dcite:IsDocumentedBy" + Documents = "dcite:Documents" + IsCompiledBy = "dcite:IsCompiledBy" + Compiles = "dcite:Compiles" + IsVariantFormOf = "dcite:IsVariantFormOf" + IsOriginalFormOf = "dcite:IsOriginalFormOf" + IsIdenticalTo = "dcite:IsIdenticalTo" + IsReviewedBy = "dcite:IsReviewedBy" + Reviews = "dcite:Reviews" + IsDerivedFrom = "dcite:IsDerivedFrom" + IsSourceOf = "dcite:IsSourceOf" + IsRequiredBy = "dcite:IsRequiredBy" + Requires = "dcite:Requires" + Obsoletes = "dcite:Obsoletes" + IsObsoletedBy = "dcite:IsObsoletedBy" + IsPublishedIn = "dcite:IsPublishedIn" + + +class ResourceType(str, Enum): + """ + An enumeration of resource types + """ + + Audiovisual = "dcite:Audiovisual" + Book = "dcite:Book" + BookChapter = "dcite:BookChapter" + Collection = "dcite:Collection" + ComputationalNotebook = "dcite:ComputationalNotebook" + ConferencePaper = "dcite:ConferencePaper" + ConferenceProceeding = "dcite:ConferenceProceeding" + DataPaper = "dcite:DataPaper" + Dataset = "dcite:Dataset" + Dissertation = "dcite:Dissertation" + Event = "dcite:Event" + Image = "dcite:Image" + Instrument = "dcite:Instrument" + InteractiveResource = "dcite:InteractiveResource" + Journal = "dcite:Journal" + JournalArticle = "dcite:JournalArticle" + Model = "dcite:Model" + OutputManagementPlan = "dcite:OutputManagementPlan" + PeerReview = "dcite:PeerReview" + PhysicalObject = "dcite:PhysicalObject" + Preprint = "dcite:Preprint" + Report = "dcite:Report" + Service = "dcite:Service" + Software = "dcite:Software" + Sound = "dcite:Sound" + Standard = "dcite:Standard" + StudyRegistration = "dcite:StudyRegistration" + Text = "dcite:Text" + Workflow = "dcite:Workflow" + Other = "dcite:Other" + + +class RoleType(str, Enum): + """ + An enumeration of roles + """ + + Author = "dcite:Author" + Conceptualization = "dcite:Conceptualization" + ContactPerson = "dcite:ContactPerson" + DataCollector = "dcite:DataCollector" + DataCurator = "dcite:DataCurator" + DataManager = "dcite:DataManager" + FormalAnalysis = "dcite:FormalAnalysis" + FundingAcquisition = "dcite:FundingAcquisition" + Investigation = "dcite:Investigation" + Maintainer = "dcite:Maintainer" + Methodology = "dcite:Methodology" + Producer = "dcite:Producer" + ProjectLeader = "dcite:ProjectLeader" + ProjectManager = "dcite:ProjectManager" + ProjectMember = "dcite:ProjectMember" + ProjectAdministration = "dcite:ProjectAdministration" + Researcher = "dcite:Researcher" + Resources = "dcite:Resources" + Software = "dcite:Software" + Supervision = "dcite:Supervision" + Validation = "dcite:Validation" + Visualization = "dcite:Visualization" + Funder = "dcite:Funder" + Sponsor = "dcite:Sponsor" + StudyParticipant = "dcite:StudyParticipant" + Affiliation = "dcite:Affiliation" + EthicsApproval = "dcite:EthicsApproval" + Other = "dcite:Other" + + +class DandiBaseModel(ConfiguredBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "id": { + "description": "Uniform resource identifier", + "name": "id", + "required": False, + } + }, + } + ) + + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["DandiBaseModel"] = Field( + default="DandiBaseModel", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class AccessRequirements(DandiBaseModel): + """ + Information about access options for the dataset + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "contactPoint": { + "description": "Who or where to look for " + "information about access.", + "name": "contactPoint", + }, + "description": { + "description": "Information about access " + "requirements when embargoed or " + "restricted", + "name": "description", + "required": False, + }, + }, + } + ) + + contactPoint: Optional[ContactPoint] = Field( + default=None, + description="""Who or where to look for information about access.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AccessRequirements", "EthicsApproval", "Organization"] + } + }, + ) + description: Optional[str] = Field( + default=None, + description="""Information about access requirements when embargoed or restricted""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + embargoedUntil: Optional[date] = Field( + default=None, + title="Embargo end date", + description="""Date on which embargo ends.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AccessRequirements"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + status: AccessType = Field( + default=..., + title="Access status", + description="""The access status of the item.""", + json_schema_extra={"linkml_meta": {"domain_of": ["AccessRequirements"]}}, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["AccessRequirements"] = Field( + default="AccessRequirements", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Activity(DandiBaseModel): + """ + Information about the Project activity + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "description": { + "description": "The description of the " "activity.", + "name": "description", + "required": False, + }, + "identifier": { + "name": "identifier", + "range": "string", + "required": False, + }, + "name": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "description": "The name of the activity.", + "name": "name", + "required": True, + "title": "Title", + }, + }, + } + ) + + description: Optional[str] = Field( + default=None, + description="""The description of the activity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + endDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + identifier: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + title="Title", + description="""The name of the activity.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + startDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + used: Optional[list[Equipment]] = Field( + default=None, + description="""A listing of equipment used for the activity.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}}, + ) + wasAssociatedWith: Optional[list[Union[Agent, Organization, Person, Software]]] = ( + Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + {"range": "Software"}, + {"range": "Agent"}, + ], + "domain_of": ["Activity"], + } + }, + ) + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Activity"] = Field( + default="Activity", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Affiliation(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "description": "Use an ror.org identifier for " "institutions.", + "name": "identifier", + "pattern": "^https://ror.org/[a-z0-9]+$", + "range": "string", + "required": False, + "title": "A ror.org identifier", + }, + "name": { + "description": "Name of organization", + "name": "name", + "required": True, + }, + }, + } + ) + + identifier: Optional[str] = Field( + default=None, + title="A ror.org identifier", + description="""Use an ror.org identifier for institutions.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + description="""Name of organization""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Affiliation"] = Field( + default="Affiliation", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("identifier") + def pattern_identifier(cls, v): + pattern = re.compile(r"^https://ror.org/[a-z0-9]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid identifier format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid identifier format: {v}" + raise ValueError(err_msg) + return v + + +class Agent(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "description": "Identifier for an agent.", + "name": "identifier", + "range": "string", + "required": False, + "title": "Identifier", + }, + "name": {"name": "name", "required": True}, + "url": { + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + }, + }, + } + ) + + identifier: Optional[str] = Field( + default=None, + title="Identifier", + description="""Identifier for an agent.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + url: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Agent"] = Field( + default="Agent", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class Allele(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "any_of": [ + {"range": "string"}, + {"multivalued": True, "range": "string"}, + ], + "description": "Identifier for genotyping " "allele.", + "name": "identifier", + "range": "Any", + "required": True, + } + }, + } + ) + + alleleSymbol: Optional[str] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Allele"]}} + ) + alleleType: Optional[str] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Allele"]}} + ) + identifier: str = Field( + default=..., + description="""Identifier for genotyping allele.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "string"}, + {"multivalued": True, "range": "string"}, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Allele"] = Field( + default="Allele", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class AssetsSummary(DandiBaseModel): + """ + Summary over assets contained in a dandiset (published or not) + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "species": { + "multivalued": True, + "name": "species", + "readonly": "Read-only for clients; managed by " "server", + }, + "variableMeasured": {"name": "variableMeasured", "range": "string"}, + }, + } + ) + + approach: Optional[list[ApproachType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + dataStandard: Optional[list[StandardsType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + measurementTechnique: Optional[list[MeasurementTechniqueType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + numberOfBytes: int = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + numberOfCells: Optional[int] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + numberOfFiles: int = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + numberOfSamples: Optional[int] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + numberOfSubjects: Optional[int] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + species: Optional[list[SpeciesType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "Participant"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + variableMeasured: Optional[list[str]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["AssetsSummary"] = Field( + default="AssetsSummary", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class BaseType(DandiBaseModel): + """ + Base class for enumerated types + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable " + "to translate the logic " + "contained in the wrap " + "validation function, " + ".wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "description": "The identifier can be any url " + "or a compact URI, preferably " + "supported by identifiers.org.", + "name": "identifier", + "range": "Any", + "required": False, + }, + "name": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "description": "The name of the item.", + "name": "name", + "required": False, + }, + }, + } + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["BaseType"] = Field( + default="BaseType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Anatomy(BaseType): + """ + UBERON or other identifier for anatomical part studied + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Anatomy"] = Field( + default="Anatomy", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class ApproachType(BaseType): + """ + Identifier for approach used + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["ApproachType"] = Field( + default="ApproachType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class AssayType(BaseType): + """ + OBI based identifier for the assay(s) used + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["AssayType"] = Field( + default="AssayType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class BioSample(DandiBaseModel): + """ + Description of the sample that was studied + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "name": "identifier", + "range": "string", + "required": True, + }, + "sameAs": {"name": "sameAs", "range": "string"}, + "wasAttributedTo": { + "description": "Participant(s) or " + "Subject(s) associated with " + "this sample.", + "name": "wasAttributedTo", + }, + "wasDerivedFrom": { + "description": "Describes the hierarchy of " + "sample derivation or " + "aggregation.", + "name": "wasDerivedFrom", + }, + }, + } + ) + + anatomy: Optional[list[Anatomy]] = Field( + default=None, + description="""Identifier for what organ the sample belongs to. Use the most specific descriptor from sources such as UBERON.""", + json_schema_extra={"linkml_meta": {"domain_of": ["BioSample"]}}, + ) + assayType: Optional[list[AssayType]] = Field( + default=None, + description="""Identifier for the assay(s) used (e.g., OBI).""", + json_schema_extra={"linkml_meta": {"domain_of": ["BioSample"]}}, + ) + hasMember: Optional[list[str]] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["BioSample"]}} + ) + identifier: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + sameAs: Optional[list[str]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset", "BioSample", "Dandiset", "Participant"] + } + }, + ) + sampleType: SampleType = Field( + default=..., + description="""Identifier for the sample characteristics (e.g., from OBI, Encode).""", + json_schema_extra={"linkml_meta": {"domain_of": ["BioSample"]}}, + ) + wasAttributedTo: Optional[list[Participant]] = Field( + default=None, + description="""Participant(s) or Subject(s) associated with this sample.""", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "BioSample"]}}, + ) + wasDerivedFrom: Optional[list[BioSample]] = Field( + default=None, + description="""Describes the hierarchy of sample derivation or aggregation.""", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "BioSample"]}}, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["BioSample"] = Field( + default="BioSample", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class CommonModel(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "access": { + "name": "access", + "notes": [ + "pydantic2linkml: Unable to express the " + "default factory, at 0xADDRESS>, in " + "LinkML.", + "pydantic2linkml: Unable to translate the " + "logic contained in the after validation " + "function, .", + ], + }, + "contributor": { + "description": "Contributors to this item: " + "persons or organizations.", + "name": "contributor", + "required": False, + "title": "Contributors", + }, + "description": { + "description": "A description of the item.", + "name": "description", + "required": False, + }, + "license": {"name": "license", "required": False}, + "name": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "description": "The name of the item.", + "name": "name", + "required": False, + "title": "Title", + }, + "repository": { + "description": "location of the item", + "name": "repository", + "notes": [ + "pydantic2linkml: Unable to translate " + "the logic contained in the wrap " + "validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + "readonly": "Read-only for clients; managed by " "server", + }, + "url": { + "description": "permalink to the item", + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + }, + "wasGeneratedBy": {"name": "wasGeneratedBy", "range": "Activity"}, + }, + } + ) + + about: Optional[list[Union[Anatomy, Disorder, GenericType]]] = Field( + default=None, + title="Subject matter of the dataset", + description="""The subject matter of the content, such as disorders, brain anatomy.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "Disorder"}, + {"range": "Anatomy"}, + {"range": "GenericType"}, + ], + "domain_of": ["CommonModel"], + } + }, + ) + access: Optional[list[AccessRequirements]] = Field( + default=None, + title="Access information", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, .", + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + acknowledgement: Optional[str] = Field( + default=None, + description="""Any acknowledgments not covered by contributors or external resources.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + contributor: Optional[list[Union[Organization, Person]]] = Field( + default=None, + title="Contributors", + description="""Contributors to this item: persons or organizations.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + ], + "domain_of": ["CommonModel"], + } + }, + ) + description: Optional[str] = Field( + default=None, + description="""A description of the item.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + ethicsApproval: Optional[list[EthicsApproval]] = Field( + default=None, + title="Ethics approvals", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + keywords: Optional[list[str]] = Field( + default=None, + description="""Keywords used to describe this content.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + license: Optional[list[LicenseType]] = Field( + default=None, + description="""Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + name: Optional[str] = Field( + default=None, + title="Title", + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + protocol: Optional[list[str]] = Field( + default=None, + description="""A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + relatedResource: Optional[list[Resource]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, ." + ], + } + }, + ) + repository: Optional[str] = Field( + default=None, + description="""location of the item""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel", "Resource"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaVersion: Optional[str] = Field( + default="0.8.0", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server", + } + }, + ) + studyTarget: Optional[list[str]] = Field( + default=None, + description="""Objectives or specific questions of the study.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + url: Optional[str] = Field( + default=None, + description="""permalink to the item""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + wasGeneratedBy: Optional[ + list[Union[Activity, Project, PublishActivity, Session]] + ] = Field( + default=None, + json_schema_extra={ + "linkml_meta": {"domain_of": ["CommonModel", "GenotypeInfo"]} + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["CommonModel"] = Field( + default="CommonModel", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("protocol") + def pattern_protocol(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid protocol format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid protocol format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("repository") + def pattern_repository(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class BareAsset(CommonModel): + """ + Metadata used to describe an asset anywhere (local or server). Derived from C2M2 (Level 0 and 1) and schema.org + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "access": { + "maximum_cardinality": 1, + "name": "access", + "notes": [ + "pydantic2linkml: Unable to express the " + "default factory, at 0xADDRESS>, in " + "LinkML.", + "pydantic2linkml: Unable to translate the " + "logic contained in the after validation " + "function, .", + ], + }, + "dateModified": { + "name": "dateModified", + "title": "Asset (file or metadata) " "modification date and time", + }, + "sameAs": { + "name": "sameAs", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + "variableMeasured": { + "name": "variableMeasured", + "range": "PropertyValue", + }, + "wasAttributedTo": { + "description": "Associated participant(s) " "or subject(s).", + "name": "wasAttributedTo", + }, + "wasGeneratedBy": { + "any_of": [ + {"range": "Session"}, + {"range": "Project"}, + {"range": "Activity"}, + ], + "description": "Describe the session, " + "project or activity that " + "generated this asset.", + "name": "wasGeneratedBy", + "range": "Any", + "title": "Name of the session, project or " "activity.", + }, + }, + } + ) + + approach: Optional[list[ApproachType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + blobDateModified: Optional[datetime] = Field( + default=None, + title="Asset file modification date and time.", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset"]}}, + ) + contentSize: Union[int, str] = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", "range": "string"}, + {"minimum_value": 0, "range": "integer"}, + ], + "domain_of": ["BareAsset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + dataType: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + dateModified: Optional[datetime] = Field( + default=None, + title="Asset (file or metadata) modification date and time", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "Dandiset"]}}, + ) + digest: str = Field( + default=..., + title="A map of dandi digests to their values", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >.", + "pydantic2linkml: Warning: The translation is incomplete. `dict` " + "types are yet to be supported.", + ], + } + }, + ) + encodingFormat: str = Field( + default=..., + title="File encoding format", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + {"range": "string"}, + ], + "domain_of": ["BareAsset"], + } + }, + ) + measurementTechnique: Optional[list[MeasurementTechniqueType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + path: str = Field( + default=..., json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset"]}} + ) + sameAs: Optional[list[str]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset", "BioSample", "Dandiset", "Participant"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + variableMeasured: Optional[list[PropertyValue]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + wasAttributedTo: Optional[list[Participant]] = Field( + default=None, + description="""Associated participant(s) or subject(s).""", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "BioSample"]}}, + ) + wasDerivedFrom: Optional[list[BioSample]] = Field( + default=None, + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "BioSample"]}}, + ) + about: Optional[list[Union[Anatomy, Disorder, GenericType]]] = Field( + default=None, + title="Subject matter of the dataset", + description="""The subject matter of the content, such as disorders, brain anatomy.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "Disorder"}, + {"range": "Anatomy"}, + {"range": "GenericType"}, + ], + "domain_of": ["CommonModel"], + } + }, + ) + access: Optional[list[AccessRequirements]] = Field( + default=None, + title="Access information", + max_length=1, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, .", + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + acknowledgement: Optional[str] = Field( + default=None, + description="""Any acknowledgments not covered by contributors or external resources.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + contributor: Optional[list[Union[Organization, Person]]] = Field( + default=None, + title="Contributors", + description="""Contributors to this item: persons or organizations.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + ], + "domain_of": ["CommonModel"], + } + }, + ) + description: Optional[str] = Field( + default=None, + description="""A description of the item.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + ethicsApproval: Optional[list[EthicsApproval]] = Field( + default=None, + title="Ethics approvals", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + keywords: Optional[list[str]] = Field( + default=None, + description="""Keywords used to describe this content.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + license: Optional[list[LicenseType]] = Field( + default=None, + description="""Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + name: Optional[str] = Field( + default=None, + title="Title", + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + protocol: Optional[list[str]] = Field( + default=None, + description="""A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + relatedResource: Optional[list[Resource]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, ." + ], + } + }, + ) + repository: Optional[str] = Field( + default=None, + description="""location of the item""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel", "Resource"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaVersion: Optional[str] = Field( + default="0.8.0", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server", + } + }, + ) + studyTarget: Optional[list[str]] = Field( + default=None, + description="""Objectives or specific questions of the study.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + url: Optional[str] = Field( + default=None, + description="""permalink to the item""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + wasGeneratedBy: Optional[ + list[ + Union[Project, Session, Union[Activity, Project, PublishActivity, Session]] + ] + ] = Field( + default=None, + title="Name of the session, project or activity.", + description="""Describe the session, project or activity that generated this asset.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "Session"}, + {"range": "Project"}, + {"range": "Activity"}, + ], + "domain_of": ["CommonModel", "GenotypeInfo"], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["BareAsset"] = Field( + default="BareAsset", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("dataType") + def pattern_dataType(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid dataType format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid dataType format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("sameAs") + def pattern_sameAs(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sameAs format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sameAs format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("protocol") + def pattern_protocol(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid protocol format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid protocol format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("repository") + def pattern_repository(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class Asset(BareAsset): + """ + Metadata used to describe an asset on the server. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "id": { + "description": "Uniform resource identifier.", + "name": "id", + "required": True, + }, + "identifier": { + "name": "identifier", + "pattern": "^(?:urn:uuid:)?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$", + "range": "string", + "readonly": "Read-only for clients; managed by " "server", + "required": True, + }, + "publishedBy": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable " + "to translate the logic " + "contained in the wrap " + "validation function, " + ".wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + {"range": "PublishActivity"}, + ], + "name": "publishedBy", + }, + }, + } + ) + + contentUrl: list[str] = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Asset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + datePublished: Optional[datetime] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Asset", "Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + identifier: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + publishedBy: Optional[Union[PublishActivity, str]] = Field( + default=None, + description="""The URL should contain the provenance of the publishing process.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + {"range": "PublishActivity"}, + ], + "domain_of": ["Asset", "Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + approach: Optional[list[ApproachType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + blobDateModified: Optional[datetime] = Field( + default=None, + title="Asset file modification date and time.", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset"]}}, + ) + contentSize: Union[int, str] = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", "range": "string"}, + {"minimum_value": 0, "range": "integer"}, + ], + "domain_of": ["BareAsset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + dataType: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + dateModified: Optional[datetime] = Field( + default=None, + title="Asset (file or metadata) modification date and time", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "Dandiset"]}}, + ) + digest: str = Field( + default=..., + title="A map of dandi digests to their values", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >.", + "pydantic2linkml: Warning: The translation is incomplete. `dict` " + "types are yet to be supported.", + ], + } + }, + ) + encodingFormat: str = Field( + default=..., + title="File encoding format", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + {"range": "string"}, + ], + "domain_of": ["BareAsset"], + } + }, + ) + measurementTechnique: Optional[list[MeasurementTechniqueType]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + path: str = Field( + default=..., json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset"]}} + ) + sameAs: Optional[list[str]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset", "BioSample", "Dandiset", "Participant"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + variableMeasured: Optional[list[PropertyValue]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AssetsSummary", "BareAsset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + wasAttributedTo: Optional[list[Participant]] = Field( + default=None, + description="""Associated participant(s) or subject(s).""", + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "BioSample"]}}, + ) + wasDerivedFrom: Optional[list[BioSample]] = Field( + default=None, + json_schema_extra={"linkml_meta": {"domain_of": ["BareAsset", "BioSample"]}}, + ) + about: Optional[list[Union[Anatomy, Disorder, GenericType]]] = Field( + default=None, + title="Subject matter of the dataset", + description="""The subject matter of the content, such as disorders, brain anatomy.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "Disorder"}, + {"range": "Anatomy"}, + {"range": "GenericType"}, + ], + "domain_of": ["CommonModel"], + } + }, + ) + access: Optional[list[AccessRequirements]] = Field( + default=None, + title="Access information", + max_length=1, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, .", + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + acknowledgement: Optional[str] = Field( + default=None, + description="""Any acknowledgments not covered by contributors or external resources.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + contributor: Optional[list[Union[Organization, Person]]] = Field( + default=None, + title="Contributors", + description="""Contributors to this item: persons or organizations.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + ], + "domain_of": ["CommonModel"], + } + }, + ) + description: Optional[str] = Field( + default=None, + description="""A description of the item.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + ethicsApproval: Optional[list[EthicsApproval]] = Field( + default=None, + title="Ethics approvals", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + keywords: Optional[list[str]] = Field( + default=None, + description="""Keywords used to describe this content.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + license: Optional[list[LicenseType]] = Field( + default=None, + description="""Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + name: Optional[str] = Field( + default=None, + title="Title", + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + protocol: Optional[list[str]] = Field( + default=None, + description="""A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + relatedResource: Optional[list[Resource]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, ." + ], + } + }, + ) + repository: Optional[str] = Field( + default=None, + description="""location of the item""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel", "Resource"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaVersion: Optional[str] = Field( + default="0.8.0", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server", + } + }, + ) + studyTarget: Optional[list[str]] = Field( + default=None, + description="""Objectives or specific questions of the study.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + url: Optional[str] = Field( + default=None, + description="""permalink to the item""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + wasGeneratedBy: Optional[ + list[ + Union[Project, Session, Union[Activity, Project, PublishActivity, Session]] + ] + ] = Field( + default=None, + title="Name of the session, project or activity.", + description="""Describe the session, project or activity that generated this asset.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "Session"}, + {"range": "Project"}, + {"range": "Activity"}, + ], + "domain_of": ["CommonModel", "GenotypeInfo"], + } + }, + ) + id: str = Field( + default=..., + description="""Uniform resource identifier.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Asset"] = Field( + default="Asset", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("contentUrl") + def pattern_contentUrl(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid contentUrl format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid contentUrl format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("identifier") + def pattern_identifier(cls, v): + pattern = re.compile( + r"^(?:urn:uuid:)?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid identifier format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid identifier format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("dataType") + def pattern_dataType(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid dataType format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid dataType format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("sameAs") + def pattern_sameAs(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sameAs format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sameAs format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("protocol") + def pattern_protocol(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid protocol format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid protocol format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("repository") + def pattern_repository(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class ContactPoint(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "email": {"description": "Email address of contact.", "name": "email"}, + "url": { + "description": "A Web page to find information on how " + "to contact.", + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + }, + }, + } + ) + + email: Optional[str] = Field( + default=None, + description="""Email address of contact.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["ContactPoint", "Contributor"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + url: Optional[str] = Field( + default=None, + description="""A Web page to find information on how to contact.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["ContactPoint"] = Field( + default="ContactPoint", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class Contributor(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "description": "Use a common identifier such as " + "ORCID (orcid.org) for people or " + "ROR (ror.org) for institutions.", + "name": "identifier", + "range": "string", + "required": False, + "title": "A common identifier", + }, + "includeInCitation": { + "description": "A flag to indicate " + "whether a contributor " + "should be included when " + "generating a citation " + "for the item.", + "ifabsent": "True", + "name": "includeInCitation", + }, + "name": {"name": "name", "required": False}, + "url": { + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + }, + }, + } + ) + + awardNumber: Optional[str] = Field( + default=None, + title="Identifier for an award", + description="""Identifier associated with a sponsored or gift award.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Contributor"]}}, + ) + email: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["ContactPoint", "Contributor"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + identifier: Optional[str] = Field( + default=None, + title="A common identifier", + description="""Use a common identifier such as ORCID (orcid.org) for people or ROR (ror.org) for institutions.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + includeInCitation: Optional[bool] = Field( + default=True, + title="Include contributor in citation", + description="""A flag to indicate whether a contributor should be included when generating a citation for the item.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Contributor"], "ifabsent": "True"} + }, + ) + name: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + roleName: Optional[list[RoleType]] = Field( + default=None, + title="Role", + description="""Role(s) of the contributor. Multiple roles can be selected.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Contributor"]}}, + ) + url: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Contributor"] = Field( + default="Contributor", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class Dandiset(CommonModel): + """ + A body of structured information describing a DANDI dataset. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "contributor": { + "description": "People or Organizations that " + "have contributed to this " + "Dandiset.", + "minimum_cardinality": 1, + "name": "contributor", + "notes": [ + "pydantic2linkml: Unable to " + "translate the logic contained in " + "the after validation function, " + ">." + ], + "required": True, + "title": "Dandiset contributors", + }, + "dateModified": { + "name": "dateModified", + "readonly": "Read-only for clients; managed " "by server", + "title": "Last modification date and time.", + }, + "description": { + "all_of": [{"pattern": "^[\\s\\S]{,10000}\\Z"}], + "description": "A description of the Dandiset", + "name": "description", + "required": True, + }, + "id": { + "name": "id", + "pattern": "^([A-Z][-A-Z]*|[a-z][-a-z]*):\\d{6}(/(draft|\\d+\\.\\d+\\.\\d+))$", + "required": True, + }, + "identifier": { + "description": "A Dandiset identifier that can " + "be resolved by identifiers.org.", + "name": "identifier", + "pattern": "^[A-Z][-A-Z]*:\\d{6}$", + "range": "string", + "readonly": "Read-only for clients; managed by " "server", + "required": True, + "title": "Dandiset identifier", + }, + "license": { + "minimum_cardinality": 1, + "name": "license", + "required": True, + }, + "name": { + "description": "A title associated with the Dandiset.", + "name": "name", + "required": True, + "title": "Dandiset title", + }, + "publishedBy": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable " + "to translate the logic " + "contained in the wrap " + "validation function, " + ".wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + {"range": "PublishActivity"}, + ], + "name": "publishedBy", + }, + "sameAs": { + "description": "Known DANDI URLs of the Dandiset at " + "other DANDI instances.", + "name": "sameAs", + "pattern": "^dandi://[A-Z][-A-Z]*/\\d{6}(@(draft|\\d+\\.\\d+\\.\\d+))?(/\\S+)?$", + "range": "string", + }, + "url": { + "description": "Permalink to the Dandiset.", + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + }, + "version": { + "name": "version", + "readonly": "Read-only for clients; managed by " "server", + }, + "wasGeneratedBy": { + "description": "Project(s) that generated " "this Dandiset.", + "name": "wasGeneratedBy", + "range": "Project", + "title": "Associated projects", + }, + }, + } + ) + + assetsSummary: AssetsSummary = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + citation: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + dateCreated: Optional[datetime] = Field( + default=None, + title="Dandiset creation date and time.", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + dateModified: Optional[datetime] = Field( + default=None, + title="Last modification date and time.", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset", "Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + datePublished: Optional[datetime] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Asset", "Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + doi: Optional[str] = Field( + default=None, + title="DOI", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + identifier: str = Field( + default=..., + title="Dandiset identifier", + description="""A Dandiset identifier that can be resolved by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + manifestLocation: list[str] = Field( + default=..., + min_length=1, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Dandiset"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + publishedBy: Optional[Union[PublishActivity, str]] = Field( + default=None, + description="""The URL should contain the provenance of the publishing process.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + {"range": "PublishActivity"}, + ], + "domain_of": ["Asset", "Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + releaseNotes: Optional[str] = Field( + default=None, + description="""The description of the release""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Dandiset"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + sameAs: Optional[list[str]] = Field( + default=None, + description="""Known DANDI URLs of the Dandiset at other DANDI instances.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset", "BioSample", "Dandiset", "Participant"] + } + }, + ) + version: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Dandiset", "Software"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + about: Optional[list[Union[Anatomy, Disorder, GenericType]]] = Field( + default=None, + title="Subject matter of the dataset", + description="""The subject matter of the content, such as disorders, brain anatomy.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "Disorder"}, + {"range": "Anatomy"}, + {"range": "GenericType"}, + ], + "domain_of": ["CommonModel"], + } + }, + ) + access: Optional[list[AccessRequirements]] = Field( + default=None, + title="Access information", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, .", + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + acknowledgement: Optional[str] = Field( + default=None, + description="""Any acknowledgments not covered by contributors or external resources.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + contributor: list[Union[Organization, Person]] = Field( + default=..., + title="Dandiset contributors", + description="""People or Organizations that have contributed to this Dandiset.""", + min_length=1, + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + ], + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + description: str = Field( + default=..., + description="""A description of the Dandiset""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,10000}\\Z"}], + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ], + } + }, + ) + ethicsApproval: Optional[list[EthicsApproval]] = Field( + default=None, + title="Ethics approvals", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + keywords: Optional[list[str]] = Field( + default=None, + description="""Keywords used to describe this content.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + license: list[LicenseType] = Field( + default=..., + description="""Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.""", + min_length=1, + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + name: str = Field( + default=..., + title="Dandiset title", + description="""A title associated with the Dandiset.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + protocol: Optional[list[str]] = Field( + default=None, + description="""A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + relatedResource: Optional[list[Resource]] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, ." + ], + } + }, + ) + repository: Optional[str] = Field( + default=None, + description="""location of the item""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel", "Resource"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaVersion: Optional[str] = Field( + default="0.8.0", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["CommonModel"], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server", + } + }, + ) + studyTarget: Optional[list[str]] = Field( + default=None, + description="""Objectives or specific questions of the study.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel"]}}, + ) + url: Optional[str] = Field( + default=None, + description="""Permalink to the Dandiset.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + wasGeneratedBy: Optional[list[Project]] = Field( + default=None, + title="Associated projects", + description="""Project(s) that generated this Dandiset.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["CommonModel", "GenotypeInfo"]} + }, + ) + id: str = Field( + default=..., + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Dandiset"] = Field( + default="Dandiset", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("doi") + def pattern_doi(cls, v): + pattern = re.compile(r"^(10\.\d{4,}/[a-z][-a-z]*\.\d{6}/\d+\.\d+\.\d+|)$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid doi format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid doi format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("identifier") + def pattern_identifier(cls, v): + pattern = re.compile(r"^[A-Z][-A-Z]*:\d{6}$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid identifier format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid identifier format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("manifestLocation") + def pattern_manifestLocation(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid manifestLocation format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid manifestLocation format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("sameAs") + def pattern_sameAs(cls, v): + pattern = re.compile( + r"^dandi://[A-Z][-A-Z]*/\d{6}(@(draft|\d+\.\d+\.\d+))?(/\S+)?$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid sameAs format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid sameAs format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("protocol") + def pattern_protocol(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid protocol format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid protocol format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("repository") + def pattern_repository(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid repository format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid repository format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("id") + def pattern_id(cls, v): + pattern = re.compile( + r"^([A-Z][-A-Z]*|[a-z][-a-z]*):\d{6}(/(draft|\d+\.\d+\.\d+))$" + ) + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid id format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid id format: {v}" + raise ValueError(err_msg) + return v + + +class Disorder(BaseType): + """ + Biolink, SNOMED, or other identifier for disorder studied + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + dxdate: Optional[list[Union[date, datetime]]] = Field( + default=None, + title="Dates of diagnosis", + description="""Dates of diagnosis""", + json_schema_extra={ + "linkml_meta": { + "any_of": [{"range": "date"}, {"range": "datetime"}], + "domain_of": ["Disorder"], + } + }, + ) + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Disorder"] = Field( + default="Disorder", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Equipment(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "description": { + "description": "The description of the " "equipment.", + "name": "description", + "required": False, + }, + "identifier": { + "name": "identifier", + "range": "string", + "required": False, + }, + "name": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "description": "A name for the equipment.", + "name": "name", + "required": True, + "title": "Title", + }, + }, + } + ) + + description: Optional[str] = Field( + default=None, + description="""The description of the equipment.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + identifier: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + title="Title", + description="""A name for the equipment.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Equipment"] = Field( + default="Equipment", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class EthicsApproval(DandiBaseModel): + """ + Information about ethics committee approval for project + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "contactPoint": { + "description": "Information about the ethics " + "approval committee.", + "name": "contactPoint", + }, + "identifier": { + "description": "Approved Protocol identifier, " + "often a number or alphanumeric " + "string.", + "name": "identifier", + "range": "string", + "required": True, + "title": "Approved protocol identifier", + }, + }, + } + ) + + contactPoint: Optional[ContactPoint] = Field( + default=None, + description="""Information about the ethics approval committee.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AccessRequirements", "EthicsApproval", "Organization"] + } + }, + ) + identifier: str = Field( + default=..., + title="Approved protocol identifier", + description="""Approved Protocol identifier, often a number or alphanumeric string.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["EthicsApproval"] = Field( + default="EthicsApproval", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class GenericType(BaseType): + """ + An object to capture any type for about + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["GenericType"] = Field( + default="GenericType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class GenotypeInfo(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "wasGeneratedBy": { + "description": "Information about session " + "activity used to determine " + "genotype.", + "name": "wasGeneratedBy", + "range": "Session", + } + }, + } + ) + + alleles: list[Allele] = Field( + default=..., + description="""Information about alleles at the locus.""", + json_schema_extra={"linkml_meta": {"domain_of": ["GenotypeInfo"]}}, + ) + locus: Locus = Field( + default=..., + description="""Locus at which information was extracted.""", + json_schema_extra={"linkml_meta": {"domain_of": ["GenotypeInfo"]}}, + ) + wasGeneratedBy: Optional[list[Session]] = Field( + default=None, + description="""Information about session activity used to determine genotype.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["CommonModel", "GenotypeInfo"]} + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["GenotypeInfo"] = Field( + default="GenotypeInfo", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Locus(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "any_of": [ + {"range": "string"}, + {"multivalued": True, "range": "string"}, + ], + "description": "Identifier for genotyping " "locus.", + "name": "identifier", + "range": "Any", + "required": True, + } + }, + } + ) + + identifier: str = Field( + default=..., + description="""Identifier for genotyping locus.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "string"}, + {"multivalued": True, "range": "string"}, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + locusType: Optional[str] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Locus"]}} + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Locus"] = Field( + default="Locus", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class MeasurementTechniqueType(BaseType): + """ + Identifier for measurement technique used + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["MeasurementTechniqueType"] = Field( + default="MeasurementTechniqueType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Organization(Contributor): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "contactPoint": { + "description": "Contact for the organization", + "multivalued": True, + "name": "contactPoint", + "title": "Organization contact information", + }, + "identifier": { + "description": "Use an ror.org identifier for " "institutions.", + "name": "identifier", + "pattern": "^https://ror.org/[a-z0-9]+$", + "title": "A ror.org identifier", + }, + "includeInCitation": { + "description": "A flag to indicate " + "whether a contributor " + "should be included when " + "generating a citation " + "for the item", + "ifabsent": "False", + "name": "includeInCitation", + }, + }, + } + ) + + contactPoint: Optional[list[ContactPoint]] = Field( + default=None, + title="Organization contact information", + description="""Contact for the organization""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["AccessRequirements", "EthicsApproval", "Organization"] + } + }, + ) + awardNumber: Optional[str] = Field( + default=None, + title="Identifier for an award", + description="""Identifier associated with a sponsored or gift award.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Contributor"]}}, + ) + email: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["ContactPoint", "Contributor"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + identifier: Optional[str] = Field( + default=None, + title="A ror.org identifier", + description="""Use an ror.org identifier for institutions.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + includeInCitation: Optional[bool] = Field( + default=False, + title="Include contributor in citation", + description="""A flag to indicate whether a contributor should be included when generating a citation for the item""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Contributor"], "ifabsent": "False"} + }, + ) + name: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + roleName: Optional[list[RoleType]] = Field( + default=None, + title="Role", + description="""Role(s) of the contributor. Multiple roles can be selected.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Contributor"]}}, + ) + url: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Organization"] = Field( + default="Organization", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("identifier") + def pattern_identifier(cls, v): + pattern = re.compile(r"^https://ror.org/[a-z0-9]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid identifier format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid identifier format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class Participant(DandiBaseModel): + """ + Description about the Participant or Subject studied. The Participant or Subject can be any individual or synthesized Agent. The properties of the Participant or Subject refers to information at the timepoint when the Participant or Subject engaged in the production of data being described. + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "name": "identifier", + "range": "string", + "required": True, + }, + "sameAs": { + "description": "An identifier to link participants " + "or subjects across datasets.", + "name": "sameAs", + "range": "string", + }, + "species": { + "description": "An identifier indicating the " + "taxonomic classification of the " + "participant or subject.", + "name": "species", + }, + }, + } + ) + + age: Optional[PropertyValue] = Field( + default=None, + description="""A representation of age using ISO 8601 duration. This should include a valueReference if anything other than date of birth is used.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Participant"]}}, + ) + altName: Optional[list[str]] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Participant"]}} + ) + cellLine: Optional[str] = Field( + default=None, + description="""Cell line associated with the participant or subject.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Participant"]}}, + ) + disorder: Optional[list[Disorder]] = Field( + default=None, + description="""Any current diagnosed disease or disorder associated with the participant or subject.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Participant"]}}, + ) + genotype: Optional[Union[GenotypeInfo, str]] = Field( + default=None, + description="""Genotype descriptor of participant or subject if available""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"multivalued": True, "range": "GenotypeInfo"}, + {"range": "string"}, + ], + "domain_of": ["Participant"], + } + }, + ) + identifier: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + relatedParticipant: Optional[list[RelatedParticipant]] = Field( + default=None, + description="""Information about related participants or subjects in a study or across studies.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Participant"]}}, + ) + sameAs: Optional[list[str]] = Field( + default=None, + description="""An identifier to link participants or subjects across datasets.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BareAsset", "BioSample", "Dandiset", "Participant"] + } + }, + ) + sex: Optional[SexType] = Field( + default=None, + description="""Identifier for sex of the participant or subject if available. (e.g. from OBI)""", + json_schema_extra={"linkml_meta": {"domain_of": ["Participant"]}}, + ) + species: Optional[SpeciesType] = Field( + default=None, + description="""An identifier indicating the taxonomic classification of the participant or subject.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["AssetsSummary", "Participant"]} + }, + ) + strain: Optional[StrainType] = Field( + default=None, + description="""Identifier for the strain of the participant or subject.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Participant"]}}, + ) + vendor: Optional[Organization] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["Participant"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, ." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Participant"] = Field( + default="Participant", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Person(Contributor): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "description": "An ORCID (orcid.org) identifier " + "for an individual.", + "name": "identifier", + "pattern": "^\\d{4}-\\d{4}-\\d{4}-(\\d{3}X|\\d{4})$", + "title": "An ORCID identifier", + }, + "name": { + "description": "Use the format: familyname, given " "names ...", + "name": "name", + "pattern": "^([\\w\\s\\-\\.']+),\\s+([\\w\\s\\-\\.']+)$", + "required": True, + "title": "Use Last, First. Example: Lovelace, Augusta " "Ada", + }, + }, + } + ) + + affiliation: Optional[list[Affiliation]] = Field( + default=None, + description="""An organization that this person is affiliated with.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Person"]}}, + ) + awardNumber: Optional[str] = Field( + default=None, + title="Identifier for an award", + description="""Identifier associated with a sponsored or gift award.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Contributor"]}}, + ) + email: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["ContactPoint", "Contributor"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + identifier: Optional[str] = Field( + default=None, + title="An ORCID identifier", + description="""An ORCID (orcid.org) identifier for an individual.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + includeInCitation: Optional[bool] = Field( + default=True, + title="Include contributor in citation", + description="""A flag to indicate whether a contributor should be included when generating a citation for the item.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Contributor"], "ifabsent": "True"} + }, + ) + name: str = Field( + default=..., + title="Use Last, First. Example: Lovelace, Augusta Ada", + description="""Use the format: familyname, given names ...""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + roleName: Optional[list[RoleType]] = Field( + default=None, + title="Role", + description="""Role(s) of the contributor. Multiple roles can be selected.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Contributor"]}}, + ) + url: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Person"] = Field( + default="Person", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("identifier") + def pattern_identifier(cls, v): + pattern = re.compile(r"^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid identifier format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid identifier format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("name") + def pattern_name(cls, v): + pattern = re.compile(r"^([\w\s\-\.']+),\s+([\w\s\-\.']+)$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid name format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid name format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class Project(Activity): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "description": { + "description": "A brief description of the " "project.", + "name": "description", + }, + "name": { + "description": "The name of the project that " + "generated this Dandiset or asset.", + "name": "name", + "title": "Name of project", + }, + }, + } + ) + + description: Optional[str] = Field( + default=None, + description="""A brief description of the project.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + endDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + identifier: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + title="Name of project", + description="""The name of the project that generated this Dandiset or asset.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + startDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + used: Optional[list[Equipment]] = Field( + default=None, + description="""A listing of equipment used for the activity.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}}, + ) + wasAssociatedWith: Optional[list[Union[Agent, Organization, Person, Software]]] = ( + Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + {"range": "Software"}, + {"range": "Agent"}, + ], + "domain_of": ["Activity"], + } + }, + ) + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Project"] = Field( + default="Project", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class PropertyValue(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + maxValue: Optional[float] = Field( + default=None, + json_schema_extra={"linkml_meta": {"domain_of": ["PropertyValue"]}}, + ) + minValue: Optional[float] = Field( + default=None, + json_schema_extra={"linkml_meta": {"domain_of": ["PropertyValue"]}}, + ) + propertyID: Optional[Union[IdentifierType, str]] = Field( + default=None, + description="""A commonly used identifier for the characteristic represented by the property. For example, a known prefix like DOI or a full URL.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + {"range": "IdentifierType"}, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + ], + "domain_of": ["PropertyValue"], + } + }, + ) + unitText: Optional[str] = Field( + default=None, + json_schema_extra={"linkml_meta": {"domain_of": ["PropertyValue"]}}, + ) + value: Optional[Any] = Field( + default=None, + description="""The value associated with this property.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [{"range": "Any"}, {"multivalued": True, "range": "Any"}], + "domain_of": ["PropertyValue"], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "after validation function, >." + ], + } + }, + ) + valueReference: Optional[PropertyValue] = Field( + default=None, + json_schema_extra={"linkml_meta": {"domain_of": ["PropertyValue"]}}, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["PropertyValue"] = Field( + default="PropertyValue", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class PublishActivity(Activity): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + description: Optional[str] = Field( + default=None, + description="""The description of the activity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + endDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + identifier: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + title="Title", + description="""The name of the activity.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + startDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + used: Optional[list[Equipment]] = Field( + default=None, + description="""A listing of equipment used for the activity.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}}, + ) + wasAssociatedWith: Optional[list[Union[Agent, Organization, Person, Software]]] = ( + Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + {"range": "Software"}, + {"range": "Agent"}, + ], + "domain_of": ["Activity"], + } + }, + ) + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["PublishActivity"] = Field( + default="PublishActivity", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class RelatedParticipant(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "name": "identifier", + "range": "string", + "required": False, + }, + "name": { + "name": "name", + "required": False, + "title": "Name of the participant or subject", + }, + "relation": { + "description": "Indicates how the current " + "participant or subject is related " + "to the other participant or " + "subject. This relation should " + "satisfy: Participant/Subject " + " " + "relatedParticipant/Subject.", + "name": "relation", + "range": "ParticipantRelationType", + "title": "Participant or subject relation", + }, + "url": { + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + "title": "URL of the related participant or subject", + }, + }, + } + ) + + identifier: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: Optional[str] = Field( + default=None, + title="Name of the participant or subject", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + relation: ParticipantRelationType = Field( + default=..., + title="Participant or subject relation", + description="""Indicates how the current participant or subject is related to the other participant or subject. This relation should satisfy: Participant/Subject relatedParticipant/Subject.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["RelatedParticipant", "Resource"]} + }, + ) + url: Optional[str] = Field( + default=None, + title="URL of the related participant or subject", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["RelatedParticipant"] = Field( + default="RelatedParticipant", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class Resource(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "name": "identifier", + "range": "string", + "required": False, + }, + "name": { + "name": "name", + "required": False, + "title": "A title of the resource", + }, + "relation": { + "description": "Indicates how the resource is " + "related to the dataset. This " + "relation should satisfy: dandiset " + " resource.", + "name": "relation", + "range": "RelationType", + "title": "Resource relation", + }, + "repository": { + "description": "Name of the repository in which " + "the resource is housed.", + "name": "repository", + "range": "string", + "title": "Name of the repository", + }, + "url": { + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + "title": "URL of the resource", + }, + }, + } + ) + + identifier: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: Optional[str] = Field( + default=None, + title="A title of the resource", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + relation: RelationType = Field( + default=..., + title="Resource relation", + description="""Indicates how the resource is related to the dataset. This relation should satisfy: dandiset resource.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["RelatedParticipant", "Resource"]} + }, + ) + repository: Optional[str] = Field( + default=None, + title="Name of the repository", + description="""Name of the repository in which the resource is housed.""", + json_schema_extra={"linkml_meta": {"domain_of": ["CommonModel", "Resource"]}}, + ) + resourceType: Optional[ResourceType] = Field( + default=None, + title="Resource type", + description="""The type of resource.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Resource"]}}, + ) + url: Optional[str] = Field( + default=None, + title="URL of the resource", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Resource"] = Field( + default="Resource", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class SampleType(BaseType): + """ + OBI based identifier for the sample type used + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["SampleType"] = Field( + default="SampleType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Session(Activity): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "description": { + "description": "A brief description of the " "session.", + "name": "description", + }, + "name": { + "description": "The name of the logical session " + "associated with the asset.", + "name": "name", + "title": "Name of session", + }, + }, + } + ) + + description: Optional[str] = Field( + default=None, + description="""A brief description of the session.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment", + ] + } + }, + ) + endDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + identifier: Optional[str] = Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + title="Name of session", + description="""The name of the logical session associated with the asset.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + startDate: Optional[datetime] = Field( + default=None, json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}} + ) + used: Optional[list[Equipment]] = Field( + default=None, + description="""A listing of equipment used for the activity.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Activity"]}}, + ) + wasAssociatedWith: Optional[list[Union[Agent, Organization, Person, Software]]] = ( + Field( + default=None, + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Person", + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the after validation function, ." + ], + "range": "Organization", + }, + {"range": "Software"}, + {"range": "Agent"}, + ], + "domain_of": ["Activity"], + } + }, + ) + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Session"] = Field( + default="Session", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class SexType(BaseType): + """ + Identifier for the sex of the sample + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["SexType"] = Field( + default="SexType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class Software(DandiBaseModel): + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7", + "slot_usage": { + "identifier": { + "description": "RRID of the software from " "scicrunch.org.", + "name": "identifier", + "pattern": "^RRID:.*", + "range": "string", + "required": False, + "title": "Research resource identifier", + }, + "name": {"name": "name", "required": True}, + "url": { + "description": "Web page for the software.", + "name": "url", + "notes": [ + "pydantic2linkml: Unable to translate the " + "logic contained in the wrap validation " + "function, .wrap_val " + "at 0xADDRESS>." + ], + }, + }, + } + ) + + identifier: Optional[str] = Field( + default=None, + title="Research resource identifier", + description="""RRID of the software from scicrunch.org.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + name: str = Field( + default=..., + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ] + } + }, + ) + url: Optional[str] = Field( + default=None, + description="""Web page for the software.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software", + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the " + "wrap validation function, .wrap_val at " + "0xADDRESS>." + ], + } + }, + ) + version: str = Field( + default=..., + json_schema_extra={"linkml_meta": {"domain_of": ["Dandiset", "Software"]}}, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["Software"] = Field( + default="Software", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + @field_validator("identifier") + def pattern_identifier(cls, v): + pattern = re.compile(r"^RRID:.*") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid identifier format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid identifier format: {v}" + raise ValueError(err_msg) + return v + + @field_validator("url") + def pattern_url(cls, v): + pattern = re.compile(r"^(?i:http|https)://[^\s]+$") + if isinstance(v, list): + for element in v: + if isinstance(element, str) and not pattern.match(element): + err_msg = f"Invalid url format: {element}" + raise ValueError(err_msg) + elif isinstance(v, str) and not pattern.match(v): + err_msg = f"Invalid url format: {v}" + raise ValueError(err_msg) + return v + + +class SpeciesType(BaseType): + """ + Identifier for species of the sample + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["SpeciesType"] = Field( + default="SpeciesType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class StandardsType(BaseType): + """ + Identifier for data standard used + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["StandardsType"] = Field( + default="StandardsType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +class StrainType(BaseType): + """ + Identifier for the strain of the sample + """ + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + {"from_schema": "https://schema.dandiarchive.org/s/dandi/v0.7"} + ) + + identifier: Optional[str] = Field( + default=None, + description="""The identifier can be any url or a compact URI, preferably supported by identifiers.org.""", + json_schema_extra={ + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic " + "contained in the wrap validation function, .wrap_val " + "at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri", + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string", + }, + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + name: Optional[str] = Field( + default=None, + description="""The name of the item.""", + json_schema_extra={ + "linkml_meta": { + "all_of": [{"pattern": "^[\\s\\S]{,150}\\Z"}], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software", + ], + } + }, + ) + id: Optional[str] = Field( + default=None, + description="""Uniform resource identifier""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + schemaKey: Literal["StrainType"] = Field( + default="StrainType", + json_schema_extra={ + "linkml_meta": { + "designates_type": True, + "domain_of": ["DandiBaseModel"], + "readonly": "Read-only for clients; managed by server", + } + }, + ) + + +# Model rebuild +# see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model +DandiBaseModel.model_rebuild() +AccessRequirements.model_rebuild() +Activity.model_rebuild() +Affiliation.model_rebuild() +Agent.model_rebuild() +Allele.model_rebuild() +AssetsSummary.model_rebuild() +BaseType.model_rebuild() +Anatomy.model_rebuild() +ApproachType.model_rebuild() +AssayType.model_rebuild() +BioSample.model_rebuild() +CommonModel.model_rebuild() +BareAsset.model_rebuild() +Asset.model_rebuild() +ContactPoint.model_rebuild() +Contributor.model_rebuild() +Dandiset.model_rebuild() +Disorder.model_rebuild() +Equipment.model_rebuild() +EthicsApproval.model_rebuild() +GenericType.model_rebuild() +GenotypeInfo.model_rebuild() +Locus.model_rebuild() +MeasurementTechniqueType.model_rebuild() +Organization.model_rebuild() +Participant.model_rebuild() +Person.model_rebuild() +Project.model_rebuild() +PropertyValue.model_rebuild() +PublishActivity.model_rebuild() +RelatedParticipant.model_rebuild() +Resource.model_rebuild() +SampleType.model_rebuild() +Session.model_rebuild() +SexType.model_rebuild() +Software.model_rebuild() +SpeciesType.model_rebuild() +StandardsType.model_rebuild() +StrainType.model_rebuild() diff --git a/dandischema/models_linkml/asset.json b/dandischema/models_linkml/asset.json new file mode 100644 index 00000000..c8decf45 --- /dev/null +++ b/dandischema/models_linkml/asset.json @@ -0,0 +1,4062 @@ +{ + "$defs": { + "AccessRequirements": { + "additionalProperties": false, + "description": "Information about access options for the dataset", + "properties": { + "contactPoint": { + "anyOf": [ + { + "$ref": "#/$defs/ContactPoint" + }, + { + "type": "null" + } + ], + "description": "Who or where to look for information about access." + }, + "description": { + "description": "Information about access requirements when embargoed or restricted", + "type": [ + "string", + "null" + ] + }, + "embargoedUntil": { + "description": "Date on which embargo ends.", + "format": "date", + "title": "Embargo end date", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "AccessRequirements" + ], + "type": "string" + }, + "status": { + "$ref": "#/$defs/AccessType", + "description": "The access status of the item.", + "title": "Access status" + } + }, + "required": [ + "status", + "schemaKey" + ], + "title": "AccessRequirements", + "type": "object" + }, + "AccessType": { + "description": "An enumeration of access status options", + "enum": [ + "dandi:OpenAccess", + "dandi:EmbargoedAccess" + ], + "title": "AccessType", + "type": "string" + }, + "Activity": { + "additionalProperties": false, + "description": "Information about the Project activity", + "properties": { + "description": { + "description": "The description of the activity.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the activity.", + "title": "Title", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Activity" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Activity", + "type": "object" + }, + "Affiliation": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Use an ror.org identifier for institutions.", + "pattern": "^https://ror.org/[a-z0-9]+$", + "title": "A ror.org identifier", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Name of organization", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Affiliation" + ], + "type": "string" + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Affiliation", + "type": "object" + }, + "AgeReferenceType": { + "description": "An enumeration of age reference", + "enum": [ + "dandi:BirthReference", + "dandi:GestationalReference" + ], + "title": "AgeReferenceType", + "type": "string" + }, + "Agent": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Identifier for an agent.", + "title": "Identifier", + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "schemaKey": { + "enum": [ + "Agent" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Agent", + "type": "object" + }, + "Allele": { + "additionalProperties": false, + "description": "", + "properties": { + "alleleSymbol": { + "type": [ + "string", + "null" + ] + }, + "alleleType": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "Identifier for genotyping allele." + }, + "schemaKey": { + "enum": [ + "Allele" + ], + "type": "string" + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "Allele", + "type": "object" + }, + "Anatomy": { + "additionalProperties": false, + "description": "UBERON or other identifier for anatomical part studied", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Anatomy" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "Anatomy", + "type": "object" + }, + "Any": { + "additionalProperties": true, + "description": "Any object", + "title": "Any", + "type": [ + "null", + "boolean", + "object", + "number", + "string" + ] + }, + "ApproachType": { + "additionalProperties": false, + "description": "Identifier for approach used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "ApproachType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "ApproachType", + "type": "object" + }, + "AssayType": { + "additionalProperties": false, + "description": "OBI based identifier for the assay(s) used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "AssayType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "AssayType", + "type": "object" + }, + "Asset": { + "additionalProperties": false, + "description": "Metadata used to describe an asset on the server.", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "maxItems": 1, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "approach": { + "items": { + "$ref": "#/$defs/ApproachType" + }, + "type": [ + "array", + "null" + ] + }, + "blobDateModified": { + "format": "date-time", + "title": "Asset file modification date and time.", + "type": [ + "string", + "null" + ] + }, + "contentSize": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", + "type": "string" + }, + { + "minimum": 0, + "type": "integer" + } + ] + }, + "contentUrl": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": "array" + }, + "contributor": { + "description": "Contributors to this item: persons or organizations.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "title": "Contributors", + "type": [ + "array", + "null" + ] + }, + "dataType": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Asset (file or metadata) modification date and time", + "type": [ + "string", + "null" + ] + }, + "datePublished": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "A description of the item.", + "type": [ + "string", + "null" + ] + }, + "digest": { + "title": "A map of dandi digests to their values", + "type": "string" + }, + "encodingFormat": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "type": "string" + } + ], + "title": "File encoding format" + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier.", + "type": "string" + }, + "identifier": { + "pattern": "^(?:urn:uuid:)?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$", + "type": "string" + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "type": [ + "array", + "null" + ] + }, + "measurementTechnique": { + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "title": "Title", + "type": "string" + }, + "path": { + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "publishedBy": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "null" + } + ], + "description": "The URL should contain the provenance of the publishing process." + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Asset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "permalink to the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "variableMeasured": { + "items": { + "$ref": "#/$defs/PropertyValue" + }, + "type": [ + "array", + "null" + ] + }, + "wasAttributedTo": { + "description": "Associated participant(s) or subject(s).", + "items": { + "$ref": "#/$defs/Participant" + }, + "type": [ + "array", + "null" + ] + }, + "wasDerivedFrom": { + "items": { + "$ref": "#/$defs/BioSample" + }, + "type": [ + "array", + "null" + ] + }, + "wasGeneratedBy": { + "description": "Describe the session, project or activity that generated this asset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Session" + }, + { + "$ref": "#/$defs/Project" + }, + { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + } + ] + }, + "title": "Name of the session, project or activity.", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "contentUrl", + "identifier", + "contentSize", + "digest", + "encodingFormat", + "path", + "id", + "schemaKey" + ], + "title": "Asset", + "type": "object" + }, + "AssetsSummary": { + "additionalProperties": false, + "description": "Summary over assets contained in a dandiset (published or not)", + "properties": { + "approach": { + "items": { + "$ref": "#/$defs/ApproachType" + }, + "type": [ + "array", + "null" + ] + }, + "dataStandard": { + "items": { + "$ref": "#/$defs/StandardsType" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "measurementTechnique": { + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "type": [ + "array", + "null" + ] + }, + "numberOfBytes": { + "type": "integer" + }, + "numberOfCells": { + "type": [ + "integer", + "null" + ] + }, + "numberOfFiles": { + "type": "integer" + }, + "numberOfSamples": { + "type": [ + "integer", + "null" + ] + }, + "numberOfSubjects": { + "type": [ + "integer", + "null" + ] + }, + "schemaKey": { + "enum": [ + "AssetsSummary" + ], + "type": "string" + }, + "species": { + "items": { + "$ref": "#/$defs/SpeciesType" + }, + "type": [ + "array", + "null" + ] + }, + "variableMeasured": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "numberOfBytes", + "numberOfFiles", + "schemaKey" + ], + "title": "AssetsSummary", + "type": "object" + }, + "BareAsset": { + "additionalProperties": false, + "description": "Metadata used to describe an asset anywhere (local or server). Derived from C2M2 (Level 0 and 1) and schema.org", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "maxItems": 1, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "approach": { + "items": { + "$ref": "#/$defs/ApproachType" + }, + "type": [ + "array", + "null" + ] + }, + "blobDateModified": { + "format": "date-time", + "title": "Asset file modification date and time.", + "type": [ + "string", + "null" + ] + }, + "contentSize": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", + "type": "string" + }, + { + "minimum": 0, + "type": "integer" + } + ] + }, + "contributor": { + "description": "Contributors to this item: persons or organizations.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "title": "Contributors", + "type": [ + "array", + "null" + ] + }, + "dataType": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Asset (file or metadata) modification date and time", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "A description of the item.", + "type": [ + "string", + "null" + ] + }, + "digest": { + "title": "A map of dandi digests to their values", + "type": "string" + }, + "encodingFormat": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "type": "string" + } + ], + "title": "File encoding format" + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "type": [ + "array", + "null" + ] + }, + "measurementTechnique": { + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "title": "Title", + "type": "string" + }, + "path": { + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "BareAsset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "permalink to the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "variableMeasured": { + "items": { + "$ref": "#/$defs/PropertyValue" + }, + "type": [ + "array", + "null" + ] + }, + "wasAttributedTo": { + "description": "Associated participant(s) or subject(s).", + "items": { + "$ref": "#/$defs/Participant" + }, + "type": [ + "array", + "null" + ] + }, + "wasDerivedFrom": { + "items": { + "$ref": "#/$defs/BioSample" + }, + "type": [ + "array", + "null" + ] + }, + "wasGeneratedBy": { + "description": "Describe the session, project or activity that generated this asset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Session" + }, + { + "$ref": "#/$defs/Project" + }, + { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + } + ] + }, + "title": "Name of the session, project or activity.", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "contentSize", + "digest", + "encodingFormat", + "path", + "schemaKey" + ], + "title": "BareAsset", + "type": "object" + }, + "BaseType": { + "additionalProperties": false, + "description": "Base class for enumerated types", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "BaseType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "BaseType", + "type": "object" + }, + "BioSample": { + "additionalProperties": false, + "description": "Description of the sample that was studied", + "properties": { + "anatomy": { + "description": "Identifier for what organ the sample belongs to. Use the most specific descriptor from sources such as UBERON.", + "items": { + "$ref": "#/$defs/Anatomy" + }, + "type": [ + "array", + "null" + ] + }, + "assayType": { + "description": "Identifier for the assay(s) used (e.g., OBI).", + "items": { + "$ref": "#/$defs/AssayType" + }, + "type": [ + "array", + "null" + ] + }, + "hasMember": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": "string" + }, + "sameAs": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "sampleType": { + "$ref": "#/$defs/SampleType", + "description": "Identifier for the sample characteristics (e.g., from OBI, Encode)." + }, + "schemaKey": { + "enum": [ + "BioSample" + ], + "type": "string" + }, + "wasAttributedTo": { + "description": "Participant(s) or Subject(s) associated with this sample.", + "items": { + "$ref": "#/$defs/Participant" + }, + "type": [ + "array", + "null" + ] + }, + "wasDerivedFrom": { + "description": "Describes the hierarchy of sample derivation or aggregation.", + "items": { + "$ref": "#/$defs/BioSample" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "identifier", + "sampleType", + "schemaKey" + ], + "title": "BioSample", + "type": "object" + }, + "CommonModel": { + "additionalProperties": false, + "description": "", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "contributor": { + "description": "Contributors to this item: persons or organizations.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "title": "Contributors", + "type": [ + "array", + "null" + ] + }, + "description": { + "description": "A description of the item.", + "type": [ + "string", + "null" + ] + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "title": "Title", + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "CommonModel" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "permalink to the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "wasGeneratedBy": { + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "CommonModel", + "type": "object" + }, + "ContactPoint": { + "additionalProperties": false, + "description": "", + "properties": { + "email": { + "description": "Email address of contact.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "ContactPoint" + ], + "type": "string" + }, + "url": { + "description": "A Web page to find information on how to contact.", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "ContactPoint", + "type": "object" + }, + "Contributor": { + "additionalProperties": false, + "description": "", + "properties": { + "awardNumber": { + "description": "Identifier associated with a sponsored or gift award.", + "title": "Identifier for an award", + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Use a common identifier such as ORCID (orcid.org) for people or ROR (ror.org) for institutions.", + "title": "A common identifier", + "type": [ + "string", + "null" + ] + }, + "includeInCitation": { + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "title": "Include contributor in citation", + "type": [ + "boolean", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "roleName": { + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "title": "Role", + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Contributor" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "Contributor", + "type": "object" + }, + "DandiBaseModel": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "DandiBaseModel" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "DandiBaseModel", + "type": "object" + }, + "Dandiset": { + "additionalProperties": false, + "description": "A body of structured information describing a DANDI dataset.", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "assetsSummary": { + "$ref": "#/$defs/AssetsSummary" + }, + "citation": { + "type": "string" + }, + "contributor": { + "description": "People or Organizations that have contributed to this Dandiset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "minItems": 1, + "title": "Dandiset contributors", + "type": "array" + }, + "dateCreated": { + "format": "date-time", + "title": "Dandiset creation date and time.", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Last modification date and time.", + "type": [ + "string", + "null" + ] + }, + "datePublished": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "description": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,10000}\\Z" + } + ], + "description": "A description of the Dandiset", + "type": "string" + }, + "doi": { + "pattern": "^(10\\.\\d{4,}/[a-z][-a-z]*\\.\\d{6}/\\d+\\.\\d+\\.\\d+|)$", + "title": "DOI", + "type": [ + "string", + "null" + ] + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "pattern": "^([A-Z][-A-Z]*|[a-z][-a-z]*):\\d{6}(/(draft|\\d+\\.\\d+\\.\\d+))$", + "type": "string" + }, + "identifier": { + "description": "A Dandiset identifier that can be resolved by identifiers.org.", + "pattern": "^[A-Z][-A-Z]*:\\d{6}$", + "title": "Dandiset identifier", + "type": "string" + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "minItems": 1, + "type": "array" + }, + "manifestLocation": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "A title associated with the Dandiset.", + "title": "Dandiset title", + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "publishedBy": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "null" + } + ], + "description": "The URL should contain the provenance of the publishing process." + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "releaseNotes": { + "description": "The description of the release", + "type": [ + "string", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "description": "Known DANDI URLs of the Dandiset at other DANDI instances.", + "items": { + "pattern": "^dandi://[A-Z][-A-Z]*/\\d{6}(@(draft|\\d+\\.\\d+\\.\\d+))?(/\\S+)?$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Dandiset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "Permalink to the Dandiset.", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "string" + }, + "wasGeneratedBy": { + "description": "Project(s) that generated this Dandiset.", + "items": { + "$ref": "#/$defs/Project" + }, + "title": "Associated projects", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "assetsSummary", + "citation", + "identifier", + "manifestLocation", + "version", + "contributor", + "description", + "license", + "name", + "id", + "schemaKey" + ], + "title": "Dandiset", + "type": "object" + }, + "DigestType": { + "description": "An enumeration of checksum types", + "enum": [ + "dandi:md5", + "dandi:sha1", + "dandi:sha2-256", + "dandi:sha3-256", + "dandi:blake2b-256", + "dandi:blake3", + "dandi:dandi-etag", + "dandi:dandi-zarr-checksum" + ], + "title": "DigestType", + "type": "string" + }, + "Disorder": { + "additionalProperties": false, + "description": "Biolink, SNOMED, or other identifier for disorder studied", + "properties": { + "dxdate": { + "description": "Dates of diagnosis", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ] + }, + "title": "Dates of diagnosis", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Disorder" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "Disorder", + "type": "object" + }, + "Equipment": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "The description of the equipment.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "A name for the equipment.", + "title": "Title", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Equipment" + ], + "type": "string" + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Equipment", + "type": "object" + }, + "EthicsApproval": { + "additionalProperties": false, + "description": "Information about ethics committee approval for project", + "properties": { + "contactPoint": { + "anyOf": [ + { + "$ref": "#/$defs/ContactPoint" + }, + { + "type": "null" + } + ], + "description": "Information about the ethics approval committee." + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Approved Protocol identifier, often a number or alphanumeric string.", + "title": "Approved protocol identifier", + "type": "string" + }, + "schemaKey": { + "enum": [ + "EthicsApproval" + ], + "type": "string" + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "EthicsApproval", + "type": "object" + }, + "GenericType": { + "additionalProperties": false, + "description": "An object to capture any type for about", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "GenericType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "GenericType", + "type": "object" + }, + "GenotypeInfo": { + "additionalProperties": false, + "description": "", + "properties": { + "alleles": { + "description": "Information about alleles at the locus.", + "items": { + "$ref": "#/$defs/Allele" + }, + "type": "array" + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "locus": { + "$ref": "#/$defs/Locus", + "description": "Locus at which information was extracted." + }, + "schemaKey": { + "enum": [ + "GenotypeInfo" + ], + "type": "string" + }, + "wasGeneratedBy": { + "description": "Information about session activity used to determine genotype.", + "items": { + "$ref": "#/$defs/Session" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "alleles", + "locus", + "schemaKey" + ], + "title": "GenotypeInfo", + "type": "object" + }, + "IdentifierType": { + "description": "An enumeration of identifiers", + "enum": [ + "dandi:doi", + "dandi:orcid", + "dandi:ror", + "dandi:dandi", + "dandi:rrid" + ], + "title": "IdentifierType", + "type": "string" + }, + "LicenseType": { + "description": "An enumeration.", + "enum": [ + "spdx:CC-BY-4.0", + "spdx:CC0-1.0" + ], + "title": "LicenseType", + "type": "string" + }, + "Locus": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "Identifier for genotyping locus." + }, + "locusType": { + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Locus" + ], + "type": "string" + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "Locus", + "type": "object" + }, + "MeasurementTechniqueType": { + "additionalProperties": false, + "description": "Identifier for measurement technique used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "MeasurementTechniqueType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "MeasurementTechniqueType", + "type": "object" + }, + "Organization": { + "additionalProperties": false, + "description": "", + "properties": { + "awardNumber": { + "description": "Identifier associated with a sponsored or gift award.", + "title": "Identifier for an award", + "type": [ + "string", + "null" + ] + }, + "contactPoint": { + "description": "Contact for the organization", + "items": { + "$ref": "#/$defs/ContactPoint" + }, + "title": "Organization contact information", + "type": [ + "array", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Use an ror.org identifier for institutions.", + "pattern": "^https://ror.org/[a-z0-9]+$", + "title": "A ror.org identifier", + "type": [ + "string", + "null" + ] + }, + "includeInCitation": { + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item", + "title": "Include contributor in citation", + "type": [ + "boolean", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "roleName": { + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "title": "Role", + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Organization" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "Organization", + "type": "object" + }, + "Participant": { + "additionalProperties": false, + "description": "Description about the Participant or Subject studied. The Participant or Subject can be any individual or synthesized Agent. The properties of the Participant or Subject refers to information at the timepoint when the Participant or Subject engaged in the production of data being described.", + "properties": { + "age": { + "anyOf": [ + { + "$ref": "#/$defs/PropertyValue" + }, + { + "type": "null" + } + ], + "description": "A representation of age using ISO 8601 duration. This should include a valueReference if anything other than date of birth is used." + }, + "altName": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "cellLine": { + "description": "Cell line associated with the participant or subject.", + "type": [ + "string", + "null" + ] + }, + "disorder": { + "description": "Any current diagnosed disease or disorder associated with the participant or subject.", + "items": { + "$ref": "#/$defs/Disorder" + }, + "type": [ + "array", + "null" + ] + }, + "genotype": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/GenotypeInfo" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Genotype descriptor of participant or subject if available" + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": "string" + }, + "relatedParticipant": { + "description": "Information about related participants or subjects in a study or across studies.", + "items": { + "$ref": "#/$defs/RelatedParticipant" + }, + "type": [ + "array", + "null" + ] + }, + "sameAs": { + "description": "An identifier to link participants or subjects across datasets.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Participant" + ], + "type": "string" + }, + "sex": { + "anyOf": [ + { + "$ref": "#/$defs/SexType" + }, + { + "type": "null" + } + ], + "description": "Identifier for sex of the participant or subject if available. (e.g. from OBI)" + }, + "species": { + "anyOf": [ + { + "$ref": "#/$defs/SpeciesType" + }, + { + "type": "null" + } + ], + "description": "An identifier indicating the taxonomic classification of the participant or subject." + }, + "strain": { + "anyOf": [ + { + "$ref": "#/$defs/StrainType" + }, + { + "type": "null" + } + ], + "description": "Identifier for the strain of the participant or subject." + }, + "vendor": { + "anyOf": [ + { + "$ref": "#/$defs/Organization" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "Participant", + "type": "object" + }, + "ParticipantRelationType": { + "description": "An enumeration of participant relations", + "enum": [ + "dandi:isChildOf", + "dandi:isParentOf", + "dandi:isSiblingOf", + "dandi:isMonozygoticTwinOf", + "dandi:isDizygoticTwinOf" + ], + "title": "ParticipantRelationType", + "type": "string" + }, + "Person": { + "additionalProperties": false, + "description": "", + "properties": { + "affiliation": { + "description": "An organization that this person is affiliated with.", + "items": { + "$ref": "#/$defs/Affiliation" + }, + "type": [ + "array", + "null" + ] + }, + "awardNumber": { + "description": "Identifier associated with a sponsored or gift award.", + "title": "Identifier for an award", + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "An ORCID (orcid.org) identifier for an individual.", + "pattern": "^\\d{4}-\\d{4}-\\d{4}-(\\d{3}X|\\d{4})$", + "title": "An ORCID identifier", + "type": [ + "string", + "null" + ] + }, + "includeInCitation": { + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "title": "Include contributor in citation", + "type": [ + "boolean", + "null" + ] + }, + "name": { + "description": "Use the format: familyname, given names ...", + "pattern": "^([\\w\\s\\-\\.']+),\\s+([\\w\\s\\-\\.']+)$", + "title": "Use Last, First. Example: Lovelace, Augusta Ada", + "type": "string" + }, + "roleName": { + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "title": "Role", + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Person" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Person", + "type": "object" + }, + "Project": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "A brief description of the project.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the project that generated this Dandiset or asset.", + "title": "Name of project", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Project" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Project", + "type": "object" + }, + "PropertyValue": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "maxValue": { + "type": [ + "number", + "null" + ] + }, + "minValue": { + "type": [ + "number", + "null" + ] + }, + "propertyID": { + "anyOf": [ + { + "$ref": "#/$defs/IdentifierType" + }, + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A commonly used identifier for the characteristic represented by the property. For example, a known prefix like DOI or a full URL." + }, + "schemaKey": { + "enum": [ + "PropertyValue" + ], + "type": "string" + }, + "unitText": { + "type": [ + "string", + "null" + ] + }, + "value": { + "anyOf": [ + { + "$ref": "#/$defs/Any" + }, + { + "items": { + "$ref": "#/$defs/Any" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The value associated with this property." + }, + "valueReference": { + "anyOf": [ + { + "$ref": "#/$defs/PropertyValue" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "PropertyValue", + "type": "object" + }, + "PublishActivity": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "The description of the activity.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the activity.", + "title": "Title", + "type": "string" + }, + "schemaKey": { + "enum": [ + "PublishActivity" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "PublishActivity", + "type": "object" + }, + "RelatedParticipant": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "title": "Name of the participant or subject", + "type": [ + "string", + "null" + ] + }, + "relation": { + "$ref": "#/$defs/ParticipantRelationType", + "description": "Indicates how the current participant or subject is related to the other participant or subject. This relation should satisfy: Participant/Subject relatedParticipant/Subject.", + "title": "Participant or subject relation" + }, + "schemaKey": { + "enum": [ + "RelatedParticipant" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "title": "URL of the related participant or subject", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "relation", + "schemaKey" + ], + "title": "RelatedParticipant", + "type": "object" + }, + "RelationType": { + "description": "An enumeration of resource relations", + "enum": [ + "dcite:IsCitedBy", + "dcite:Cites", + "dcite:IsSupplementTo", + "dcite:IsSupplementedBy", + "dcite:IsContinuedBy", + "dcite:Continues", + "dcite:Describes", + "dcite:IsDescribedBy", + "dcite:HasMetadata", + "dcite:IsMetadataFor", + "dcite:HasVersion", + "dcite:IsVersionOf", + "dcite:IsNewVersionOf", + "dcite:IsPreviousVersionOf", + "dcite:IsPartOf", + "dcite:HasPart", + "dcite:IsReferencedBy", + "dcite:References", + "dcite:IsDocumentedBy", + "dcite:Documents", + "dcite:IsCompiledBy", + "dcite:Compiles", + "dcite:IsVariantFormOf", + "dcite:IsOriginalFormOf", + "dcite:IsIdenticalTo", + "dcite:IsReviewedBy", + "dcite:Reviews", + "dcite:IsDerivedFrom", + "dcite:IsSourceOf", + "dcite:IsRequiredBy", + "dcite:Requires", + "dcite:Obsoletes", + "dcite:IsObsoletedBy", + "dcite:IsPublishedIn" + ], + "title": "RelationType", + "type": "string" + }, + "Resource": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "title": "A title of the resource", + "type": [ + "string", + "null" + ] + }, + "relation": { + "$ref": "#/$defs/RelationType", + "description": "Indicates how the resource is related to the dataset. This relation should satisfy: dandiset resource.", + "title": "Resource relation" + }, + "repository": { + "description": "Name of the repository in which the resource is housed.", + "title": "Name of the repository", + "type": [ + "string", + "null" + ] + }, + "resourceType": { + "$ref": "#/$defs/ResourceType", + "description": "The type of resource.", + "title": "Resource type" + }, + "schemaKey": { + "enum": [ + "Resource" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "title": "URL of the resource", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "relation", + "schemaKey" + ], + "title": "Resource", + "type": "object" + }, + "ResourceType": { + "description": "An enumeration of resource types", + "enum": [ + "dcite:Audiovisual", + "dcite:Book", + "dcite:BookChapter", + "dcite:Collection", + "dcite:ComputationalNotebook", + "dcite:ConferencePaper", + "dcite:ConferenceProceeding", + "dcite:DataPaper", + "dcite:Dataset", + "dcite:Dissertation", + "dcite:Event", + "dcite:Image", + "dcite:Instrument", + "dcite:InteractiveResource", + "dcite:Journal", + "dcite:JournalArticle", + "dcite:Model", + "dcite:OutputManagementPlan", + "dcite:PeerReview", + "dcite:PhysicalObject", + "dcite:Preprint", + "dcite:Report", + "dcite:Service", + "dcite:Software", + "dcite:Sound", + "dcite:Standard", + "dcite:StudyRegistration", + "dcite:Text", + "dcite:Workflow", + "dcite:Other" + ], + "title": "ResourceType", + "type": "string" + }, + "RoleType": { + "description": "An enumeration of roles", + "enum": [ + "dcite:Author", + "dcite:Conceptualization", + "dcite:ContactPerson", + "dcite:DataCollector", + "dcite:DataCurator", + "dcite:DataManager", + "dcite:FormalAnalysis", + "dcite:FundingAcquisition", + "dcite:Investigation", + "dcite:Maintainer", + "dcite:Methodology", + "dcite:Producer", + "dcite:ProjectLeader", + "dcite:ProjectManager", + "dcite:ProjectMember", + "dcite:ProjectAdministration", + "dcite:Researcher", + "dcite:Resources", + "dcite:Software", + "dcite:Supervision", + "dcite:Validation", + "dcite:Visualization", + "dcite:Funder", + "dcite:Sponsor", + "dcite:StudyParticipant", + "dcite:Affiliation", + "dcite:EthicsApproval", + "dcite:Other" + ], + "title": "RoleType", + "type": "string" + }, + "SampleType": { + "additionalProperties": false, + "description": "OBI based identifier for the sample type used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "SampleType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "SampleType", + "type": "object" + }, + "Session": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "A brief description of the session.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the logical session associated with the asset.", + "title": "Name of session", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Session" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Session", + "type": "object" + }, + "SexType": { + "additionalProperties": false, + "description": "Identifier for the sex of the sample", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "SexType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "SexType", + "type": "object" + }, + "Software": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "RRID of the software from scicrunch.org.", + "pattern": "^RRID:.*", + "title": "Research resource identifier", + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "schemaKey": { + "enum": [ + "Software" + ], + "type": "string" + }, + "url": { + "description": "Web page for the software.", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "string" + } + }, + "required": [ + "name", + "version", + "schemaKey" + ], + "title": "Software", + "type": "object" + }, + "SpeciesType": { + "additionalProperties": false, + "description": "Identifier for species of the sample", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "SpeciesType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "SpeciesType", + "type": "object" + }, + "StandardsType": { + "additionalProperties": false, + "description": "Identifier for data standard used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "StandardsType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "StandardsType", + "type": "object" + }, + "StrainType": { + "additionalProperties": false, + "description": "Identifier for the strain of the sample", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "StrainType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "StrainType", + "type": "object" + } + }, + "$id": "https://schema.dandiarchive.org/s/dandi/v0.7", + "$schema": "https://json-schema.org/draft/2019-09/schema", + "additionalProperties": true, + "description": "Metadata used to describe an asset on the server.", + "metamodel_version": "1.11.0", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "maxItems": 1, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "approach": { + "items": { + "$ref": "#/$defs/ApproachType" + }, + "type": [ + "array", + "null" + ] + }, + "blobDateModified": { + "format": "date-time", + "title": "Asset file modification date and time.", + "type": [ + "string", + "null" + ] + }, + "contentSize": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", + "type": "string" + }, + { + "minimum": 0, + "type": "integer" + } + ] + }, + "contentUrl": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": "array" + }, + "contributor": { + "description": "Contributors to this item: persons or organizations.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "title": "Contributors", + "type": [ + "array", + "null" + ] + }, + "dataType": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Asset (file or metadata) modification date and time", + "type": [ + "string", + "null" + ] + }, + "datePublished": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "A description of the item.", + "type": [ + "string", + "null" + ] + }, + "digest": { + "title": "A map of dandi digests to their values", + "type": "string" + }, + "encodingFormat": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "type": "string" + } + ], + "title": "File encoding format" + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier.", + "type": "string" + }, + "identifier": { + "pattern": "^(?:urn:uuid:)?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$", + "type": "string" + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "type": [ + "array", + "null" + ] + }, + "measurementTechnique": { + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "title": "Title", + "type": "string" + }, + "path": { + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "publishedBy": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "null" + } + ], + "description": "The URL should contain the provenance of the publishing process." + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Asset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "permalink to the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "variableMeasured": { + "items": { + "$ref": "#/$defs/PropertyValue" + }, + "type": [ + "array", + "null" + ] + }, + "wasAttributedTo": { + "description": "Associated participant(s) or subject(s).", + "items": { + "$ref": "#/$defs/Participant" + }, + "type": [ + "array", + "null" + ] + }, + "wasDerivedFrom": { + "items": { + "$ref": "#/$defs/BioSample" + }, + "type": [ + "array", + "null" + ] + }, + "wasGeneratedBy": { + "description": "Describe the session, project or activity that generated this asset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Session" + }, + { + "$ref": "#/$defs/Project" + }, + { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + } + ] + }, + "title": "Name of the session, project or activity.", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "contentUrl", + "identifier", + "contentSize", + "digest", + "encodingFormat", + "path", + "id", + "schemaKey" + ], + "title": "dandi-schema", + "type": "object", + "version": "0.7.0" +} diff --git a/dandischema/models_linkml/dandiset.json b/dandischema/models_linkml/dandiset.json new file mode 100644 index 00000000..6d832927 --- /dev/null +++ b/dandischema/models_linkml/dandiset.json @@ -0,0 +1,3978 @@ +{ + "$defs": { + "AccessRequirements": { + "additionalProperties": false, + "description": "Information about access options for the dataset", + "properties": { + "contactPoint": { + "anyOf": [ + { + "$ref": "#/$defs/ContactPoint" + }, + { + "type": "null" + } + ], + "description": "Who or where to look for information about access." + }, + "description": { + "description": "Information about access requirements when embargoed or restricted", + "type": [ + "string", + "null" + ] + }, + "embargoedUntil": { + "description": "Date on which embargo ends.", + "format": "date", + "title": "Embargo end date", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "AccessRequirements" + ], + "type": "string" + }, + "status": { + "$ref": "#/$defs/AccessType", + "description": "The access status of the item.", + "title": "Access status" + } + }, + "required": [ + "status", + "schemaKey" + ], + "title": "AccessRequirements", + "type": "object" + }, + "AccessType": { + "description": "An enumeration of access status options", + "enum": [ + "dandi:OpenAccess", + "dandi:EmbargoedAccess" + ], + "title": "AccessType", + "type": "string" + }, + "Activity": { + "additionalProperties": false, + "description": "Information about the Project activity", + "properties": { + "description": { + "description": "The description of the activity.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the activity.", + "title": "Title", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Activity" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Activity", + "type": "object" + }, + "Affiliation": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Use an ror.org identifier for institutions.", + "pattern": "^https://ror.org/[a-z0-9]+$", + "title": "A ror.org identifier", + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "Name of organization", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Affiliation" + ], + "type": "string" + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Affiliation", + "type": "object" + }, + "AgeReferenceType": { + "description": "An enumeration of age reference", + "enum": [ + "dandi:BirthReference", + "dandi:GestationalReference" + ], + "title": "AgeReferenceType", + "type": "string" + }, + "Agent": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Identifier for an agent.", + "title": "Identifier", + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "schemaKey": { + "enum": [ + "Agent" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Agent", + "type": "object" + }, + "Allele": { + "additionalProperties": false, + "description": "", + "properties": { + "alleleSymbol": { + "type": [ + "string", + "null" + ] + }, + "alleleType": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "Identifier for genotyping allele." + }, + "schemaKey": { + "enum": [ + "Allele" + ], + "type": "string" + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "Allele", + "type": "object" + }, + "Anatomy": { + "additionalProperties": false, + "description": "UBERON or other identifier for anatomical part studied", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Anatomy" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "Anatomy", + "type": "object" + }, + "Any": { + "additionalProperties": true, + "description": "Any object", + "title": "Any", + "type": [ + "null", + "boolean", + "object", + "number", + "string" + ] + }, + "ApproachType": { + "additionalProperties": false, + "description": "Identifier for approach used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "ApproachType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "ApproachType", + "type": "object" + }, + "AssayType": { + "additionalProperties": false, + "description": "OBI based identifier for the assay(s) used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "AssayType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "AssayType", + "type": "object" + }, + "Asset": { + "additionalProperties": false, + "description": "Metadata used to describe an asset on the server.", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "maxItems": 1, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "approach": { + "items": { + "$ref": "#/$defs/ApproachType" + }, + "type": [ + "array", + "null" + ] + }, + "blobDateModified": { + "format": "date-time", + "title": "Asset file modification date and time.", + "type": [ + "string", + "null" + ] + }, + "contentSize": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", + "type": "string" + }, + { + "minimum": 0, + "type": "integer" + } + ] + }, + "contentUrl": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": "array" + }, + "contributor": { + "description": "Contributors to this item: persons or organizations.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "title": "Contributors", + "type": [ + "array", + "null" + ] + }, + "dataType": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Asset (file or metadata) modification date and time", + "type": [ + "string", + "null" + ] + }, + "datePublished": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "A description of the item.", + "type": [ + "string", + "null" + ] + }, + "digest": { + "title": "A map of dandi digests to their values", + "type": "string" + }, + "encodingFormat": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "type": "string" + } + ], + "title": "File encoding format" + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier.", + "type": "string" + }, + "identifier": { + "pattern": "^(?:urn:uuid:)?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?4[0-9a-fA-F]{3}-?[89abAB][0-9a-fA-F]{3}-?[0-9a-fA-F]{12}$", + "type": "string" + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "type": [ + "array", + "null" + ] + }, + "measurementTechnique": { + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "title": "Title", + "type": "string" + }, + "path": { + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "publishedBy": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "null" + } + ], + "description": "The URL should contain the provenance of the publishing process." + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Asset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "permalink to the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "variableMeasured": { + "items": { + "$ref": "#/$defs/PropertyValue" + }, + "type": [ + "array", + "null" + ] + }, + "wasAttributedTo": { + "description": "Associated participant(s) or subject(s).", + "items": { + "$ref": "#/$defs/Participant" + }, + "type": [ + "array", + "null" + ] + }, + "wasDerivedFrom": { + "items": { + "$ref": "#/$defs/BioSample" + }, + "type": [ + "array", + "null" + ] + }, + "wasGeneratedBy": { + "description": "Describe the session, project or activity that generated this asset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Session" + }, + { + "$ref": "#/$defs/Project" + }, + { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + } + ] + }, + "title": "Name of the session, project or activity.", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "contentUrl", + "identifier", + "contentSize", + "digest", + "encodingFormat", + "path", + "id", + "schemaKey" + ], + "title": "Asset", + "type": "object" + }, + "AssetsSummary": { + "additionalProperties": false, + "description": "Summary over assets contained in a dandiset (published or not)", + "properties": { + "approach": { + "items": { + "$ref": "#/$defs/ApproachType" + }, + "type": [ + "array", + "null" + ] + }, + "dataStandard": { + "items": { + "$ref": "#/$defs/StandardsType" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "measurementTechnique": { + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "type": [ + "array", + "null" + ] + }, + "numberOfBytes": { + "type": "integer" + }, + "numberOfCells": { + "type": [ + "integer", + "null" + ] + }, + "numberOfFiles": { + "type": "integer" + }, + "numberOfSamples": { + "type": [ + "integer", + "null" + ] + }, + "numberOfSubjects": { + "type": [ + "integer", + "null" + ] + }, + "schemaKey": { + "enum": [ + "AssetsSummary" + ], + "type": "string" + }, + "species": { + "items": { + "$ref": "#/$defs/SpeciesType" + }, + "type": [ + "array", + "null" + ] + }, + "variableMeasured": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "numberOfBytes", + "numberOfFiles", + "schemaKey" + ], + "title": "AssetsSummary", + "type": "object" + }, + "BareAsset": { + "additionalProperties": false, + "description": "Metadata used to describe an asset anywhere (local or server). Derived from C2M2 (Level 0 and 1) and schema.org", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "maxItems": 1, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "approach": { + "items": { + "$ref": "#/$defs/ApproachType" + }, + "type": [ + "array", + "null" + ] + }, + "blobDateModified": { + "format": "date-time", + "title": "Asset file modification date and time.", + "type": [ + "string", + "null" + ] + }, + "contentSize": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", + "type": "string" + }, + { + "minimum": 0, + "type": "integer" + } + ] + }, + "contributor": { + "description": "Contributors to this item: persons or organizations.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "title": "Contributors", + "type": [ + "array", + "null" + ] + }, + "dataType": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Asset (file or metadata) modification date and time", + "type": [ + "string", + "null" + ] + }, + "description": { + "description": "A description of the item.", + "type": [ + "string", + "null" + ] + }, + "digest": { + "title": "A map of dandi digests to their values", + "type": "string" + }, + "encodingFormat": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "type": "string" + } + ], + "title": "File encoding format" + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "type": [ + "array", + "null" + ] + }, + "measurementTechnique": { + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "title": "Title", + "type": "string" + }, + "path": { + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "BareAsset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "permalink to the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "variableMeasured": { + "items": { + "$ref": "#/$defs/PropertyValue" + }, + "type": [ + "array", + "null" + ] + }, + "wasAttributedTo": { + "description": "Associated participant(s) or subject(s).", + "items": { + "$ref": "#/$defs/Participant" + }, + "type": [ + "array", + "null" + ] + }, + "wasDerivedFrom": { + "items": { + "$ref": "#/$defs/BioSample" + }, + "type": [ + "array", + "null" + ] + }, + "wasGeneratedBy": { + "description": "Describe the session, project or activity that generated this asset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Session" + }, + { + "$ref": "#/$defs/Project" + }, + { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + } + ] + }, + "title": "Name of the session, project or activity.", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "contentSize", + "digest", + "encodingFormat", + "path", + "schemaKey" + ], + "title": "BareAsset", + "type": "object" + }, + "BaseType": { + "additionalProperties": false, + "description": "Base class for enumerated types", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "BaseType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "BaseType", + "type": "object" + }, + "BioSample": { + "additionalProperties": false, + "description": "Description of the sample that was studied", + "properties": { + "anatomy": { + "description": "Identifier for what organ the sample belongs to. Use the most specific descriptor from sources such as UBERON.", + "items": { + "$ref": "#/$defs/Anatomy" + }, + "type": [ + "array", + "null" + ] + }, + "assayType": { + "description": "Identifier for the assay(s) used (e.g., OBI).", + "items": { + "$ref": "#/$defs/AssayType" + }, + "type": [ + "array", + "null" + ] + }, + "hasMember": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": "string" + }, + "sameAs": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "sampleType": { + "$ref": "#/$defs/SampleType", + "description": "Identifier for the sample characteristics (e.g., from OBI, Encode)." + }, + "schemaKey": { + "enum": [ + "BioSample" + ], + "type": "string" + }, + "wasAttributedTo": { + "description": "Participant(s) or Subject(s) associated with this sample.", + "items": { + "$ref": "#/$defs/Participant" + }, + "type": [ + "array", + "null" + ] + }, + "wasDerivedFrom": { + "description": "Describes the hierarchy of sample derivation or aggregation.", + "items": { + "$ref": "#/$defs/BioSample" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "identifier", + "sampleType", + "schemaKey" + ], + "title": "BioSample", + "type": "object" + }, + "CommonModel": { + "additionalProperties": false, + "description": "", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "contributor": { + "description": "Contributors to this item: persons or organizations.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "title": "Contributors", + "type": [ + "array", + "null" + ] + }, + "description": { + "description": "A description of the item.", + "type": [ + "string", + "null" + ] + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "type": [ + "array", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "title": "Title", + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "CommonModel" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "permalink to the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "wasGeneratedBy": { + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "CommonModel", + "type": "object" + }, + "ContactPoint": { + "additionalProperties": false, + "description": "", + "properties": { + "email": { + "description": "Email address of contact.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "ContactPoint" + ], + "type": "string" + }, + "url": { + "description": "A Web page to find information on how to contact.", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "ContactPoint", + "type": "object" + }, + "Contributor": { + "additionalProperties": false, + "description": "", + "properties": { + "awardNumber": { + "description": "Identifier associated with a sponsored or gift award.", + "title": "Identifier for an award", + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Use a common identifier such as ORCID (orcid.org) for people or ROR (ror.org) for institutions.", + "title": "A common identifier", + "type": [ + "string", + "null" + ] + }, + "includeInCitation": { + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "title": "Include contributor in citation", + "type": [ + "boolean", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "roleName": { + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "title": "Role", + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Contributor" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "Contributor", + "type": "object" + }, + "DandiBaseModel": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "DandiBaseModel" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "DandiBaseModel", + "type": "object" + }, + "Dandiset": { + "additionalProperties": false, + "description": "A body of structured information describing a DANDI dataset.", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "assetsSummary": { + "$ref": "#/$defs/AssetsSummary" + }, + "citation": { + "type": "string" + }, + "contributor": { + "description": "People or Organizations that have contributed to this Dandiset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "minItems": 1, + "title": "Dandiset contributors", + "type": "array" + }, + "dateCreated": { + "format": "date-time", + "title": "Dandiset creation date and time.", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Last modification date and time.", + "type": [ + "string", + "null" + ] + }, + "datePublished": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "description": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,10000}\\Z" + } + ], + "description": "A description of the Dandiset", + "type": "string" + }, + "doi": { + "pattern": "^(10\\.\\d{4,}/[a-z][-a-z]*\\.\\d{6}/\\d+\\.\\d+\\.\\d+|)$", + "title": "DOI", + "type": [ + "string", + "null" + ] + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "pattern": "^([A-Z][-A-Z]*|[a-z][-a-z]*):\\d{6}(/(draft|\\d+\\.\\d+\\.\\d+))$", + "type": "string" + }, + "identifier": { + "description": "A Dandiset identifier that can be resolved by identifiers.org.", + "pattern": "^[A-Z][-A-Z]*:\\d{6}$", + "title": "Dandiset identifier", + "type": "string" + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "minItems": 1, + "type": "array" + }, + "manifestLocation": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "A title associated with the Dandiset.", + "title": "Dandiset title", + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "publishedBy": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "null" + } + ], + "description": "The URL should contain the provenance of the publishing process." + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "releaseNotes": { + "description": "The description of the release", + "type": [ + "string", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "description": "Known DANDI URLs of the Dandiset at other DANDI instances.", + "items": { + "pattern": "^dandi://[A-Z][-A-Z]*/\\d{6}(@(draft|\\d+\\.\\d+\\.\\d+))?(/\\S+)?$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Dandiset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "Permalink to the Dandiset.", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "string" + }, + "wasGeneratedBy": { + "description": "Project(s) that generated this Dandiset.", + "items": { + "$ref": "#/$defs/Project" + }, + "title": "Associated projects", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "assetsSummary", + "citation", + "identifier", + "manifestLocation", + "version", + "contributor", + "description", + "license", + "name", + "id", + "schemaKey" + ], + "title": "Dandiset", + "type": "object" + }, + "DigestType": { + "description": "An enumeration of checksum types", + "enum": [ + "dandi:md5", + "dandi:sha1", + "dandi:sha2-256", + "dandi:sha3-256", + "dandi:blake2b-256", + "dandi:blake3", + "dandi:dandi-etag", + "dandi:dandi-zarr-checksum" + ], + "title": "DigestType", + "type": "string" + }, + "Disorder": { + "additionalProperties": false, + "description": "Biolink, SNOMED, or other identifier for disorder studied", + "properties": { + "dxdate": { + "description": "Dates of diagnosis", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ] + }, + "title": "Dates of diagnosis", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Disorder" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "Disorder", + "type": "object" + }, + "Equipment": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "The description of the equipment.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "A name for the equipment.", + "title": "Title", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Equipment" + ], + "type": "string" + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Equipment", + "type": "object" + }, + "EthicsApproval": { + "additionalProperties": false, + "description": "Information about ethics committee approval for project", + "properties": { + "contactPoint": { + "anyOf": [ + { + "$ref": "#/$defs/ContactPoint" + }, + { + "type": "null" + } + ], + "description": "Information about the ethics approval committee." + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Approved Protocol identifier, often a number or alphanumeric string.", + "title": "Approved protocol identifier", + "type": "string" + }, + "schemaKey": { + "enum": [ + "EthicsApproval" + ], + "type": "string" + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "EthicsApproval", + "type": "object" + }, + "GenericType": { + "additionalProperties": false, + "description": "An object to capture any type for about", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "GenericType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "GenericType", + "type": "object" + }, + "GenotypeInfo": { + "additionalProperties": false, + "description": "", + "properties": { + "alleles": { + "description": "Information about alleles at the locus.", + "items": { + "$ref": "#/$defs/Allele" + }, + "type": "array" + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "locus": { + "$ref": "#/$defs/Locus", + "description": "Locus at which information was extracted." + }, + "schemaKey": { + "enum": [ + "GenotypeInfo" + ], + "type": "string" + }, + "wasGeneratedBy": { + "description": "Information about session activity used to determine genotype.", + "items": { + "$ref": "#/$defs/Session" + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "alleles", + "locus", + "schemaKey" + ], + "title": "GenotypeInfo", + "type": "object" + }, + "IdentifierType": { + "description": "An enumeration of identifiers", + "enum": [ + "dandi:doi", + "dandi:orcid", + "dandi:ror", + "dandi:dandi", + "dandi:rrid" + ], + "title": "IdentifierType", + "type": "string" + }, + "LicenseType": { + "description": "An enumeration.", + "enum": [ + "spdx:CC-BY-4.0", + "spdx:CC0-1.0" + ], + "title": "LicenseType", + "type": "string" + }, + "Locus": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "Identifier for genotyping locus." + }, + "locusType": { + "type": [ + "string", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Locus" + ], + "type": "string" + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "Locus", + "type": "object" + }, + "MeasurementTechniqueType": { + "additionalProperties": false, + "description": "Identifier for measurement technique used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "MeasurementTechniqueType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "MeasurementTechniqueType", + "type": "object" + }, + "Organization": { + "additionalProperties": false, + "description": "", + "properties": { + "awardNumber": { + "description": "Identifier associated with a sponsored or gift award.", + "title": "Identifier for an award", + "type": [ + "string", + "null" + ] + }, + "contactPoint": { + "description": "Contact for the organization", + "items": { + "$ref": "#/$defs/ContactPoint" + }, + "title": "Organization contact information", + "type": [ + "array", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "Use an ror.org identifier for institutions.", + "pattern": "^https://ror.org/[a-z0-9]+$", + "title": "A ror.org identifier", + "type": [ + "string", + "null" + ] + }, + "includeInCitation": { + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item", + "title": "Include contributor in citation", + "type": [ + "boolean", + "null" + ] + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "roleName": { + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "title": "Role", + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Organization" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "Organization", + "type": "object" + }, + "Participant": { + "additionalProperties": false, + "description": "Description about the Participant or Subject studied. The Participant or Subject can be any individual or synthesized Agent. The properties of the Participant or Subject refers to information at the timepoint when the Participant or Subject engaged in the production of data being described.", + "properties": { + "age": { + "anyOf": [ + { + "$ref": "#/$defs/PropertyValue" + }, + { + "type": "null" + } + ], + "description": "A representation of age using ISO 8601 duration. This should include a valueReference if anything other than date of birth is used." + }, + "altName": { + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "cellLine": { + "description": "Cell line associated with the participant or subject.", + "type": [ + "string", + "null" + ] + }, + "disorder": { + "description": "Any current diagnosed disease or disorder associated with the participant or subject.", + "items": { + "$ref": "#/$defs/Disorder" + }, + "type": [ + "array", + "null" + ] + }, + "genotype": { + "anyOf": [ + { + "items": { + "$ref": "#/$defs/GenotypeInfo" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Genotype descriptor of participant or subject if available" + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": "string" + }, + "relatedParticipant": { + "description": "Information about related participants or subjects in a study or across studies.", + "items": { + "$ref": "#/$defs/RelatedParticipant" + }, + "type": [ + "array", + "null" + ] + }, + "sameAs": { + "description": "An identifier to link participants or subjects across datasets.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Participant" + ], + "type": "string" + }, + "sex": { + "anyOf": [ + { + "$ref": "#/$defs/SexType" + }, + { + "type": "null" + } + ], + "description": "Identifier for sex of the participant or subject if available. (e.g. from OBI)" + }, + "species": { + "anyOf": [ + { + "$ref": "#/$defs/SpeciesType" + }, + { + "type": "null" + } + ], + "description": "An identifier indicating the taxonomic classification of the participant or subject." + }, + "strain": { + "anyOf": [ + { + "$ref": "#/$defs/StrainType" + }, + { + "type": "null" + } + ], + "description": "Identifier for the strain of the participant or subject." + }, + "vendor": { + "anyOf": [ + { + "$ref": "#/$defs/Organization" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "identifier", + "schemaKey" + ], + "title": "Participant", + "type": "object" + }, + "ParticipantRelationType": { + "description": "An enumeration of participant relations", + "enum": [ + "dandi:isChildOf", + "dandi:isParentOf", + "dandi:isSiblingOf", + "dandi:isMonozygoticTwinOf", + "dandi:isDizygoticTwinOf" + ], + "title": "ParticipantRelationType", + "type": "string" + }, + "Person": { + "additionalProperties": false, + "description": "", + "properties": { + "affiliation": { + "description": "An organization that this person is affiliated with.", + "items": { + "$ref": "#/$defs/Affiliation" + }, + "type": [ + "array", + "null" + ] + }, + "awardNumber": { + "description": "Identifier associated with a sponsored or gift award.", + "title": "Identifier for an award", + "type": [ + "string", + "null" + ] + }, + "email": { + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "An ORCID (orcid.org) identifier for an individual.", + "pattern": "^\\d{4}-\\d{4}-\\d{4}-(\\d{3}X|\\d{4})$", + "title": "An ORCID identifier", + "type": [ + "string", + "null" + ] + }, + "includeInCitation": { + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "title": "Include contributor in citation", + "type": [ + "boolean", + "null" + ] + }, + "name": { + "description": "Use the format: familyname, given names ...", + "pattern": "^([\\w\\s\\-\\.']+),\\s+([\\w\\s\\-\\.']+)$", + "title": "Use Last, First. Example: Lovelace, Augusta Ada", + "type": "string" + }, + "roleName": { + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "title": "Role", + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Person" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Person", + "type": "object" + }, + "Project": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "A brief description of the project.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the project that generated this Dandiset or asset.", + "title": "Name of project", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Project" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Project", + "type": "object" + }, + "PropertyValue": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "maxValue": { + "type": [ + "number", + "null" + ] + }, + "minValue": { + "type": [ + "number", + "null" + ] + }, + "propertyID": { + "anyOf": [ + { + "$ref": "#/$defs/IdentifierType" + }, + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "A commonly used identifier for the characteristic represented by the property. For example, a known prefix like DOI or a full URL." + }, + "schemaKey": { + "enum": [ + "PropertyValue" + ], + "type": "string" + }, + "unitText": { + "type": [ + "string", + "null" + ] + }, + "value": { + "anyOf": [ + { + "$ref": "#/$defs/Any" + }, + { + "items": { + "$ref": "#/$defs/Any" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The value associated with this property." + }, + "valueReference": { + "anyOf": [ + { + "$ref": "#/$defs/PropertyValue" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "schemaKey" + ], + "title": "PropertyValue", + "type": "object" + }, + "PublishActivity": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "The description of the activity.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the activity.", + "title": "Title", + "type": "string" + }, + "schemaKey": { + "enum": [ + "PublishActivity" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "PublishActivity", + "type": "object" + }, + "RelatedParticipant": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "title": "Name of the participant or subject", + "type": [ + "string", + "null" + ] + }, + "relation": { + "$ref": "#/$defs/ParticipantRelationType", + "description": "Indicates how the current participant or subject is related to the other participant or subject. This relation should satisfy: Participant/Subject relatedParticipant/Subject.", + "title": "Participant or subject relation" + }, + "schemaKey": { + "enum": [ + "RelatedParticipant" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "title": "URL of the related participant or subject", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "relation", + "schemaKey" + ], + "title": "RelatedParticipant", + "type": "object" + }, + "RelationType": { + "description": "An enumeration of resource relations", + "enum": [ + "dcite:IsCitedBy", + "dcite:Cites", + "dcite:IsSupplementTo", + "dcite:IsSupplementedBy", + "dcite:IsContinuedBy", + "dcite:Continues", + "dcite:Describes", + "dcite:IsDescribedBy", + "dcite:HasMetadata", + "dcite:IsMetadataFor", + "dcite:HasVersion", + "dcite:IsVersionOf", + "dcite:IsNewVersionOf", + "dcite:IsPreviousVersionOf", + "dcite:IsPartOf", + "dcite:HasPart", + "dcite:IsReferencedBy", + "dcite:References", + "dcite:IsDocumentedBy", + "dcite:Documents", + "dcite:IsCompiledBy", + "dcite:Compiles", + "dcite:IsVariantFormOf", + "dcite:IsOriginalFormOf", + "dcite:IsIdenticalTo", + "dcite:IsReviewedBy", + "dcite:Reviews", + "dcite:IsDerivedFrom", + "dcite:IsSourceOf", + "dcite:IsRequiredBy", + "dcite:Requires", + "dcite:Obsoletes", + "dcite:IsObsoletedBy", + "dcite:IsPublishedIn" + ], + "title": "RelationType", + "type": "string" + }, + "Resource": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "title": "A title of the resource", + "type": [ + "string", + "null" + ] + }, + "relation": { + "$ref": "#/$defs/RelationType", + "description": "Indicates how the resource is related to the dataset. This relation should satisfy: dandiset resource.", + "title": "Resource relation" + }, + "repository": { + "description": "Name of the repository in which the resource is housed.", + "title": "Name of the repository", + "type": [ + "string", + "null" + ] + }, + "resourceType": { + "$ref": "#/$defs/ResourceType", + "description": "The type of resource.", + "title": "Resource type" + }, + "schemaKey": { + "enum": [ + "Resource" + ], + "type": "string" + }, + "url": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "title": "URL of the resource", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "relation", + "schemaKey" + ], + "title": "Resource", + "type": "object" + }, + "ResourceType": { + "description": "An enumeration of resource types", + "enum": [ + "dcite:Audiovisual", + "dcite:Book", + "dcite:BookChapter", + "dcite:Collection", + "dcite:ComputationalNotebook", + "dcite:ConferencePaper", + "dcite:ConferenceProceeding", + "dcite:DataPaper", + "dcite:Dataset", + "dcite:Dissertation", + "dcite:Event", + "dcite:Image", + "dcite:Instrument", + "dcite:InteractiveResource", + "dcite:Journal", + "dcite:JournalArticle", + "dcite:Model", + "dcite:OutputManagementPlan", + "dcite:PeerReview", + "dcite:PhysicalObject", + "dcite:Preprint", + "dcite:Report", + "dcite:Service", + "dcite:Software", + "dcite:Sound", + "dcite:Standard", + "dcite:StudyRegistration", + "dcite:Text", + "dcite:Workflow", + "dcite:Other" + ], + "title": "ResourceType", + "type": "string" + }, + "RoleType": { + "description": "An enumeration of roles", + "enum": [ + "dcite:Author", + "dcite:Conceptualization", + "dcite:ContactPerson", + "dcite:DataCollector", + "dcite:DataCurator", + "dcite:DataManager", + "dcite:FormalAnalysis", + "dcite:FundingAcquisition", + "dcite:Investigation", + "dcite:Maintainer", + "dcite:Methodology", + "dcite:Producer", + "dcite:ProjectLeader", + "dcite:ProjectManager", + "dcite:ProjectMember", + "dcite:ProjectAdministration", + "dcite:Researcher", + "dcite:Resources", + "dcite:Software", + "dcite:Supervision", + "dcite:Validation", + "dcite:Visualization", + "dcite:Funder", + "dcite:Sponsor", + "dcite:StudyParticipant", + "dcite:Affiliation", + "dcite:EthicsApproval", + "dcite:Other" + ], + "title": "RoleType", + "type": "string" + }, + "SampleType": { + "additionalProperties": false, + "description": "OBI based identifier for the sample type used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "SampleType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "SampleType", + "type": "object" + }, + "Session": { + "additionalProperties": false, + "description": "", + "properties": { + "description": { + "description": "A brief description of the session.", + "type": [ + "string", + "null" + ] + }, + "endDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "type": [ + "string", + "null" + ] + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the logical session associated with the asset.", + "title": "Name of session", + "type": "string" + }, + "schemaKey": { + "enum": [ + "Session" + ], + "type": "string" + }, + "startDate": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "used": { + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "type": [ + "array", + "null" + ] + }, + "wasAssociatedWith": { + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Software" + }, + { + "$ref": "#/$defs/Agent" + } + ] + }, + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "name", + "schemaKey" + ], + "title": "Session", + "type": "object" + }, + "SexType": { + "additionalProperties": false, + "description": "Identifier for the sex of the sample", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "SexType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "SexType", + "type": "object" + }, + "Software": { + "additionalProperties": false, + "description": "", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "description": "RRID of the software from scicrunch.org.", + "pattern": "^RRID:.*", + "title": "Research resource identifier", + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "schemaKey": { + "enum": [ + "Software" + ], + "type": "string" + }, + "url": { + "description": "Web page for the software.", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "string" + } + }, + "required": [ + "name", + "version", + "schemaKey" + ], + "title": "Software", + "type": "object" + }, + "SpeciesType": { + "additionalProperties": false, + "description": "Identifier for species of the sample", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "SpeciesType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "SpeciesType", + "type": "object" + }, + "StandardsType": { + "additionalProperties": false, + "description": "Identifier for data standard used", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "StandardsType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "StandardsType", + "type": "object" + }, + "StrainType": { + "additionalProperties": false, + "description": "Identifier for the strain of the sample", + "properties": { + "id": { + "description": "Uniform resource identifier", + "type": [ + "string", + "null" + ] + }, + "identifier": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org." + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "The name of the item.", + "type": "string" + }, + "schemaKey": { + "enum": [ + "StrainType" + ], + "type": "string" + } + }, + "required": [ + "schemaKey" + ], + "title": "StrainType", + "type": "object" + } + }, + "$id": "https://schema.dandiarchive.org/s/dandi/v0.7", + "$schema": "https://json-schema.org/draft/2019-09/schema", + "additionalProperties": true, + "description": "A body of structured information describing a DANDI dataset.", + "metamodel_version": "1.11.0", + "properties": { + "about": { + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "title": "Subject matter of the dataset", + "type": [ + "array", + "null" + ] + }, + "access": { + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "title": "Access information", + "type": [ + "array", + "null" + ] + }, + "acknowledgement": { + "description": "Any acknowledgments not covered by contributors or external resources.", + "type": [ + "string", + "null" + ] + }, + "assetsSummary": { + "$ref": "#/$defs/AssetsSummary" + }, + "citation": { + "type": "string" + }, + "contributor": { + "description": "People or Organizations that have contributed to this Dandiset.", + "items": { + "$ref": "#/$defs/Any", + "anyOf": [ + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Organization" + } + ] + }, + "minItems": 1, + "title": "Dandiset contributors", + "type": "array" + }, + "dateCreated": { + "format": "date-time", + "title": "Dandiset creation date and time.", + "type": [ + "string", + "null" + ] + }, + "dateModified": { + "format": "date-time", + "title": "Last modification date and time.", + "type": [ + "string", + "null" + ] + }, + "datePublished": { + "format": "date-time", + "type": [ + "string", + "null" + ] + }, + "description": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,10000}\\Z" + } + ], + "description": "A description of the Dandiset", + "type": "string" + }, + "doi": { + "pattern": "^(10\\.\\d{4,}/[a-z][-a-z]*\\.\\d{6}/\\d+\\.\\d+\\.\\d+|)$", + "title": "DOI", + "type": [ + "string", + "null" + ] + }, + "ethicsApproval": { + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "title": "Ethics approvals", + "type": [ + "array", + "null" + ] + }, + "id": { + "description": "Uniform resource identifier", + "pattern": "^([A-Z][-A-Z]*|[a-z][-a-z]*):\\d{6}(/(draft|\\d+\\.\\d+\\.\\d+))$", + "type": "string" + }, + "identifier": { + "description": "A Dandiset identifier that can be resolved by identifiers.org.", + "pattern": "^[A-Z][-A-Z]*:\\d{6}$", + "title": "Dandiset identifier", + "type": "string" + }, + "keywords": { + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "minItems": 1, + "type": "array" + }, + "manifestLocation": { + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + "name": { + "allOf": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "description": "A title associated with the Dandiset.", + "title": "Dandiset title", + "type": "string" + }, + "protocol": { + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "publishedBy": { + "anyOf": [ + { + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": "string" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "null" + } + ], + "description": "The URL should contain the provenance of the publishing process." + }, + "relatedResource": { + "items": { + "$ref": "#/$defs/Resource" + }, + "type": [ + "array", + "null" + ] + }, + "releaseNotes": { + "description": "The description of the release", + "type": [ + "string", + "null" + ] + }, + "repository": { + "description": "location of the item", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "sameAs": { + "description": "Known DANDI URLs of the Dandiset at other DANDI instances.", + "items": { + "pattern": "^dandi://[A-Z][-A-Z]*/\\d{6}(@(draft|\\d+\\.\\d+\\.\\d+))?(/\\S+)?$", + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "schemaKey": { + "enum": [ + "Dandiset" + ], + "type": "string" + }, + "schemaVersion": { + "type": [ + "string", + "null" + ] + }, + "studyTarget": { + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "url": { + "description": "Permalink to the Dandiset.", + "format": "uri", + "pattern": "^(?i:http|https)://[^\\s]+$", + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "string" + }, + "wasGeneratedBy": { + "description": "Project(s) that generated this Dandiset.", + "items": { + "$ref": "#/$defs/Project" + }, + "title": "Associated projects", + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "assetsSummary", + "citation", + "identifier", + "manifestLocation", + "version", + "contributor", + "description", + "license", + "name", + "id", + "schemaKey" + ], + "title": "dandi-schema", + "type": "object", + "version": "0.7.0" +} diff --git a/dandischema/models_orig.py b/dandischema/models_orig.py new file mode 100644 index 00000000..a2b98556 --- /dev/null +++ b/dandischema/models_orig.py @@ -0,0 +1,2067 @@ +from __future__ import annotations + +from datetime import date, datetime +from enum import Enum +import re +from typing import ( + TYPE_CHECKING, + Annotated, + Any, + Dict, + List, + Literal, + Optional, + Sequence, + Type, + TypeVar, + Union, +) +from warnings import warn + +from pydantic import ( + UUID4, + AnyHttpUrl, + BaseModel, + ConfigDict, + EmailStr, + Field, + GetJsonSchemaHandler, + SerializerFunctionWrapHandler, + StringConstraints, + ValidationInfo, + field_serializer, + field_validator, + model_validator, +) +from pydantic.json_schema import JsonSchemaValue +from pydantic_core import CoreSchema, InitErrorDetails +from pydantic_core import ValidationError as _CoreValidationError +from typing_extensions import Self +from zarr_checksum.checksum import InvalidZarrChecksum, ZarrDirectoryDigest + +from dandischema.conf import ( + DEFAULT_INSTANCE_NAME, + UNVENDORED_DOI_PREFIX_PATTERN, + UNVENDORED_ID_PATTERN, + get_instance_config, +) + +from .consts import DANDI_SCHEMA_VERSION +from .digests.dandietag import DandiETag +from .types import ByteSizeJsonSchema +from .utils import name2title + +try: + from anys import AnyBase +except ImportError: + _has_anys = False +else: + _has_anys = True + +# Load needed configurations into constants +_INSTANCE_CONFIG = get_instance_config() + +# Regex pattern for the prefix of identifiers +ID_PATTERN = ( + _INSTANCE_CONFIG.instance_name + if _INSTANCE_CONFIG.instance_name != DEFAULT_INSTANCE_NAME + else UNVENDORED_ID_PATTERN +) + +# The pattern that a DOI prefix of a dandiset must conform to +DOI_PREFIX_PATTERN = ( + re.escape(_INSTANCE_CONFIG.doi_prefix) + if _INSTANCE_CONFIG.doi_prefix is not None + else UNVENDORED_DOI_PREFIX_PATTERN +) + +# The pattern of the DANDI instance URL +DANDI_INSTANCE_URL_PATTERN = ( + ".*" + if _INSTANCE_CONFIG.instance_url is None + else re.escape(str(_INSTANCE_CONFIG.instance_url).rstrip("/")) +) + +NAME_PATTERN = r"^([\w\s\-\.']+),\s+([\w\s\-\.']+)$" +UUID_PATTERN = ( + "[a-f0-9]{8}[-]*[a-f0-9]{4}[-]*" "[a-f0-9]{4}[-]*[a-f0-9]{4}[-]*[a-f0-9]{12}$" +) +ASSET_UUID_PATTERN = r"^dandiasset:" + UUID_PATTERN +VERSION_NUM_PATTERN = r"\d+\.\d+\.\d+" +VERSION_PATTERN = rf"\d{{6}}/{VERSION_NUM_PATTERN}" +_INNER_DANDI_DOI_PATTERN = ( + rf"{DOI_PREFIX_PATTERN}/{ID_PATTERN.lower()}\.{VERSION_PATTERN}" +) +DANDI_DOI_PATTERN = ( + rf"^{_INNER_DANDI_DOI_PATTERN}$" + if _INSTANCE_CONFIG.doi_prefix is not None + else rf"^({_INNER_DANDI_DOI_PATTERN}|)$" # This matches an empty string as well +) +DANDI_PUBID_PATTERN = rf"^{ID_PATTERN}:{VERSION_PATTERN}$" +DANDI_NSKEY = "dandi" # Namespace for DANDI ontology + +PUBLISHED_VERSION_URL_PATTERN = ( + rf"^{DANDI_INSTANCE_URL_PATTERN}/dandiset/{VERSION_PATTERN}$" +) +MD5_PATTERN = r"[0-9a-f]{32}" +SHA256_PATTERN = r"[0-9a-f]{64}" + +M = TypeVar("M", bound=BaseModel) + + +def diff_models(model1: M, model2: M) -> None: + """Perform a field-wise diff""" + for field in model1.model_fields: + if getattr(model1, field) != getattr(model2, field): + print(f"{field} is different") + + +if TYPE_CHECKING: + # This is just a placeholder for static type checking + class LicenseType(Enum): + ... # fmt: skip + +else: + # `sorted()` makes the member order, and hence the JSON schema, consistent. + LicenseType = Enum( + "LicenseType", + [ + (license_.name, license_.value) + for license_ in sorted(_INSTANCE_CONFIG.licenses, key=lambda lic: lic.value) + ], + ) + r""" + An enumeration of supported licenses + + The value of each member is a string that matches the regex pattern of + `^([^:\s]+):(\S+)$` in which the first group matches the license scheme such + as `"spdx"`, and the second group matches the license identifier such as + `"CC-BY-4.0"`. + """ + + +class AccessType(Enum): + """An enumeration of access status options""" + + #: The dandiset is openly accessible + OpenAccess = f"{DANDI_NSKEY}:OpenAccess" + + #: The dandiset is embargoed + EmbargoedAccess = f"{DANDI_NSKEY}:EmbargoedAccess" + + """ + Uncomment when restricted access is implemented: + #: The dandiset is restricted + RestrictedAccess = f"{DANDI_NSKEY}:RestrictedAccess" + """ + + +class DigestType(Enum): + """An enumeration of checksum types""" + + #: MD5 checksum + md5 = f"{DANDI_NSKEY}:md5" + + #: SHA1 checksum + sha1 = f"{DANDI_NSKEY}:sha1" + + #: SHA2-256 checksum + sha2_256 = f"{DANDI_NSKEY}:sha2-256" + + #: SHA3-256 checksum + sha3_256 = f"{DANDI_NSKEY}:sha3-256" + + #: BLAKE2B-256 checksum + blake2b_256 = f"{DANDI_NSKEY}:blake2b-256" + + #: BLAKE3-256 checksum + blake3 = f"{DANDI_NSKEY}:blake3" + + #: S3-style ETag + dandi_etag = f"{DANDI_NSKEY}:dandi-etag" + + #: DANDI Zarr checksum + dandi_zarr_checksum = f"{DANDI_NSKEY}:dandi-zarr-checksum" + + +class IdentifierType(Enum): + """An enumeration of identifiers""" + + doi = f"{DANDI_NSKEY}:doi" + orcid = f"{DANDI_NSKEY}:orcid" + ror = f"{DANDI_NSKEY}:ror" + dandi = f"{DANDI_NSKEY}:dandi" + rrid = f"{DANDI_NSKEY}:rrid" + + +class RelationType(Enum): + """An enumeration of resource relations""" + + #: Indicates that B includes A in a citation + IsCitedBy = "dcite:IsCitedBy" + + #: Indicates that A includes B in a citation + Cites = "dcite:Cites" + + #: Indicates that A is a supplement to B + IsSupplementTo = "dcite:IsSupplementTo" + + #: Indicates that B is a supplement to A + IsSupplementedBy = "dcite:IsSupplementedBy" + + #: Indicates A is continued by the work B + IsContinuedBy = "dcite:IsContinuedBy" + + #: Indicates A is a continuation of the work B + Continues = "dcite:Continues" + + #: Indicates A describes B + Describes = "dcite:Describes" + + #: Indicates A is described by B + IsDescribedBy = "dcite:IsDescribedBy" + + #: Indicates resource A has additional metadata B + HasMetadata = "dcite:HasMetadata" + + #: Indicates additional metadata A for a resource B + IsMetadataFor = "dcite:IsMetadataFor" + + #: Indicates A has a version (B) + HasVersion = "dcite:HasVersion" + + #: Indicates A is a version of B + IsVersionOf = "dcite:IsVersionOf" + + #: Indicates A is a new edition of B + IsNewVersionOf = "dcite:IsNewVersionOf" + + #: Indicates A is a previous edition of B + IsPreviousVersionOf = "dcite:IsPreviousVersionOf" + + #: Indicates A is a portion of B + IsPartOf = "dcite:IsPartOf" + + #: Indicates A includes the part B + HasPart = "dcite:HasPart" + + #: Indicates A is used as a source of information by B + IsReferencedBy = "dcite:IsReferencedBy" + + #: Indicates B is used as a source of information for A + References = "dcite:References" + + #: Indicates B is documentation about/explaining A + IsDocumentedBy = "dcite:IsDocumentedBy" + + #: Indicates A is documentation about B + Documents = "dcite:Documents" + + #: Indicates B is used to compile or create A + IsCompiledBy = "dcite:IsCompiledBy" + + #: Indicates B is the result of a compile or creation event using A + Compiles = "dcite:Compiles" + + #: Indicates A is a variant or different form of B + IsVariantFormOf = "dcite:IsVariantFormOf" + + #: Indicates A is the original form of B + IsOriginalFormOf = "dcite:IsOriginalFormOf" + + #: Indicates that A is identical to B + IsIdenticalTo = "dcite:IsIdenticalTo" + + #: Indicates that A is reviewed by B + IsReviewedBy = "dcite:IsReviewedBy" + + #: Indicates that A is a review of B + Reviews = "dcite:Reviews" + + #: Indicates B is a source upon which A is based + IsDerivedFrom = "dcite:IsDerivedFrom" + + #: Indicates A is a source upon which B is based + IsSourceOf = "dcite:IsSourceOf" + + #: Indicates A is required by B + IsRequiredBy = "dcite:IsRequiredBy" + + #: Indicates A requires B + Requires = "dcite:Requires" + + #: Indicates A replaces B + Obsoletes = "dcite:Obsoletes" + + #: Indicates A is replaced by B + IsObsoletedBy = "dcite:IsObsoletedBy" + + #: Indicates A is published in B + IsPublishedIn = "dcite:IsPublishedIn" + + +class ParticipantRelationType(Enum): + """An enumeration of participant relations""" + + #: Indicates that A is a child of B + isChildOf = f"{DANDI_NSKEY}:isChildOf" + + #: Indicates that A is a parent of B + isParentOf = f"{DANDI_NSKEY}:isParentOf" + + #: Indicates that A is a sibling of B + isSiblingOf = f"{DANDI_NSKEY}:isSiblingOf" + + #: Indicates that A is a monozygotic twin of B + isMonozygoticTwinOf = f"{DANDI_NSKEY}:isMonozygoticTwinOf" + + #: Indicates that A is a dizygotic twin of B + isDizygoticTwinOf = f"{DANDI_NSKEY}:isDizygoticTwinOf" + + +class RoleType(Enum): + """An enumeration of roles""" + + #: Author + Author = "dcite:Author" + + #: Conceptualization + Conceptualization = "dcite:Conceptualization" + + #: Contact Person + ContactPerson = "dcite:ContactPerson" + + #: Data Collector + DataCollector = "dcite:DataCollector" + + #: Data Curator + DataCurator = "dcite:DataCurator" + + #: Data Manager + DataManager = "dcite:DataManager" + + #: Formal Analysis + FormalAnalysis = "dcite:FormalAnalysis" + + #: Funding Acquisition + FundingAcquisition = "dcite:FundingAcquisition" + + #: Investigation + Investigation = "dcite:Investigation" + + #: Maintainer + Maintainer = "dcite:Maintainer" + + #: Methodology + Methodology = "dcite:Methodology" + + #: Producer + Producer = "dcite:Producer" + + #: Project Leader + ProjectLeader = "dcite:ProjectLeader" + + #: Project Manager + ProjectManager = "dcite:ProjectManager" + + #: Project Member + ProjectMember = "dcite:ProjectMember" + + #: Project Administration + ProjectAdministration = "dcite:ProjectAdministration" + + #: Researcher + Researcher = "dcite:Researcher" + + #: Resources + Resources = "dcite:Resources" + + #: Software + Software = "dcite:Software" + + #: Supervision + Supervision = "dcite:Supervision" + + #: Validation + Validation = "dcite:Validation" + + #: Visualization + Visualization = "dcite:Visualization" + + #: Funder + Funder = "dcite:Funder" + + #: Sponsor + Sponsor = "dcite:Sponsor" + + #: Participant in a study + StudyParticipant = "dcite:StudyParticipant" + + #: Affiliated with an entity + Affiliation = "dcite:Affiliation" + + #: Approved ethics protocol + EthicsApproval = "dcite:EthicsApproval" + + #: Other + Other = "dcite:Other" + + +class ResourceType(Enum): + """An enumeration of resource types""" + + #: Audiovisual: A series of visual representations imparting an impression of motion + # when shown in succession. May or may not include sound. + Audiovisual = "dcite:Audiovisual" + + #: Book: A medium for recording information in the form of writing or images, + # typically composed of many pages bound together and protected by a cover. + Book = "dcite:Book" + + #: BookChapter: One of the main divisions of a book. + BookChapter = "dcite:BookChapter" + + #: Collection: An aggregation of resources, which may encompass collections of one + # resourceType as well as those of mixed types. A collection is described as a + # group; its parts may also be separately described. + Collection = "dcite:Collection" + + #: ComputationalNotebook: A virtual notebook environment used for literate + # programming. + ComputationalNotebook = "dcite:ComputationalNotebook" + + #: ConferencePaper: Article that is written with the goal of being accepted to a + # conference. + ConferencePaper = "dcite:ConferencePaper" + + #: ConferenceProceeding: Collection of academic papers published in the context of + # an academic conference. + ConferenceProceeding = "dcite:ConferenceProceeding" + + #: DataPaper: A factual and objective publication with a focused intent to identify + # and describe specific data, sets of data, or data collections to facilitate + # discoverability. + DataPaper = "dcite:DataPaper" + + #: Dataset: Data encoded in a defined structure. + Dataset = "dcite:Dataset" + + #: Dissertation: A written essay, treatise, or thesis, especially one written by a + # candidate for the degree of Doctor of Philosophy. + Dissertation = "dcite:Dissertation" + + #: Event: A non-persistent, time-based occurrence. + Event = "dcite:Event" + + #: Image: A visual representation other than text. + Image = "dcite:Image" + + #: Instrument: A device, tool or apparatus used to obtain, measure and/or analyze + # data. + Instrument = "dcite:Instrument" + + #: InteractiveResource: A resource requiring interaction from the user to be + # understood, executed, or experienced. + InteractiveResource = "dcite:InteractiveResource" + + #: Journal: A scholarly publication consisting of articles that is published + # regularly throughout the year. + Journal = "dcite:Journal" + + #: JournalArticle: A written composition on a topic of interest, which forms a + # separate part of a journal. + JournalArticle = "dcite:JournalArticle" + + #: Model: An abstract, conceptual, graphical, mathematical or visualization model + # that represents empirical objects, phenomena, or physical processes. + Model = "dcite:Model" + + #: OutputManagementPlan: A formal document that outlines how research outputs are to + # be handled both during a research project and after the project is completed. + OutputManagementPlan = "dcite:OutputManagementPlan" + + #: PeerReview: Evaluation of scientific, academic, or professional work by others + # working in the same field. + PeerReview = "dcite:PeerReview" + + #: PhysicalObject: A physical object or substance. + PhysicalObject = "dcite:PhysicalObject" + + #: Preprint: A version of a scholarly or scientific paper that precedes formal peer + # review and publication in a peer-reviewed scholarly or scientific journal. + Preprint = "dcite:Preprint" + + #: Report: A document that presents information in an organized format for a + # specific audience and purpose. + Report = "dcite:Report" + + #: Service: An organized system of apparatus, appliances, staff, etc., for supplying + # some function(s) required by end users. + Service = "dcite:Service" + + #: Software: A computer program other than a computational notebook, in either + # source code (text) or compiled form. Use this type for general software components + # supporting scholarly research. Use the “ComputationalNotebook” value for virtual + # notebooks. + Software = "dcite:Software" + + #: Sound: A resource primarily intended to be heard. + Sound = "dcite:Sound" + + #: Standard: Something established by authority, custom, or general consent as a + # model, example, or point of reference. + Standard = "dcite:Standard" + + #: StudyRegistration: A detailed, time-stamped description of a research plan, often + # openly shared in a registry or published in a journal before the study is + # conducted to lend accountability and transparency in the hypothesis generating and + # testing process. + StudyRegistration = "dcite:StudyRegistration" + + #: Text: A resource consisting primarily of words for reading that is not covered by + # any other textual resource type in this list. + Text = "dcite:Text" + + #: Workflow: A structured series of steps which can be executed to produce a final + # outcome, allowing users a means to specify and enact their work in a more + # reproducible manner. + Workflow = "dcite:Workflow" + + #: Other: A resource that does not fit into any of the other categories. + Other = "dcite:Other" + + +class AgeReferenceType(Enum): + """An enumeration of age reference""" + + #: Age since Birth + BirthReference = f"{DANDI_NSKEY}:BirthReference" + + #: Age of a pregnancy (https://en.wikipedia.org/wiki/Gestational_age) + GestationalReference = f"{DANDI_NSKEY}:GestationalReference" + + +class DandiBaseModel(BaseModel): + id: Optional[str] = Field( + default=None, + description="Uniform resource identifier", + json_schema_extra={"readOnly": True}, + ) + schemaKey: str = Field( + "DandiBaseModel", validate_default=True, json_schema_extra={"readOnly": True} + ) + + def json_dict(self) -> dict: + """ + Recursively convert the instance to a `dict` of JSONable values, + including converting enum values to strings. `None` fields + are omitted. + """ + warn( + "`DandiBaseModel.json_dict()` is deprecated. Use " + "`pydantic.BaseModel.model_dump(mode='json', exclude_none=True)` instead.", + DeprecationWarning, + stacklevel=2, + ) + return self.model_dump(mode="json", exclude_none=True) + + if _has_anys: + + @field_serializer("*", mode="wrap") + def preserve_anys_values( + self, value: Any, handler: SerializerFunctionWrapHandler + ) -> Any: + return value if isinstance(value, AnyBase) else handler(value) + + @field_validator("schemaKey") + @classmethod + def ensure_schemakey(cls, val: str) -> str: + if val != cls.__name__: + raise ValueError(f"schemaKey {val} does not match classname {cls.__name__}") + return val + + @classmethod + def unvalidated(__pydantic_cls__: Type[M], **data: Any) -> M: + """Allow model to be returned without validation""" + + warn( + "`DandiBaseModel.unvalidated()` is deprecated. " + "Use `pydantic.BaseModel.model_construct()` instead.", + DeprecationWarning, + stacklevel=2, + ) + + return __pydantic_cls__.model_construct(**data) + + @classmethod + def to_dictrepr(__pydantic_cls__: Type["DandiBaseModel"]) -> str: + return ( + __pydantic_cls__.model_construct() + .__repr__() + .replace(__pydantic_cls__.__name__, "dict") + ) + + @classmethod + def __get_pydantic_json_schema__( + cls, + core_schema_: CoreSchema, + handler: GetJsonSchemaHandler, + ) -> JsonSchemaValue: + schema = handler(core_schema_) + schema = handler.resolve_ref_schema(schema) + + if schema["title"] == "PropertyValue": + schema["required"] = sorted({"value"}.union(schema.get("required", []))) + schema["title"] = name2title(schema["title"]) + if schema["type"] == "object": + schema["required"] = sorted({"schemaKey"}.union(schema.get("required", []))) + for prop, value in schema.get("properties", {}).items(): + if schema["title"] == "Person": + if prop == "name": + # JSON schema doesn't support validating unicode + # characters using the \w pattern, but Python does. So + # we are dropping the regex pattern for the schema. + del value["pattern"] + if value.get("title") is None or value["title"] == prop.title(): + value["title"] = name2title(prop) + if re.match("\\^https?://", value.get("pattern", "")): + # triggers only for ROR in identifier + value["format"] = "uri" + if value.get("format", None) == "uri": + value["maxLength"] = 1000 + allOf = value.get("allOf") + anyOf = value.get("anyOf") + items = value.get("items") + if allOf is not None: + if len(allOf) == 1 and "$ref" in allOf[0]: + value["$ref"] = allOf[0]["$ref"] + del value["allOf"] + elif len(allOf) > 1: + value["oneOf"] = value["allOf"] + value["type"] = "object" + del value["allOf"] + if anyOf is not None: + if len(anyOf) > 1 and any("$ref" in val for val in anyOf): + value["type"] = "object" + if items is not None: + anyOf = items.get("anyOf") + if ( + anyOf is not None + and len(anyOf) > 1 + and any("$ref" in val for val in anyOf) + ): + value["items"]["type"] = "object" + # In pydantic 1.8+ all Literals are mapped on to enum + # This presently breaks the schema editor UI. Revert + # to const when generating the schema. + # Note: this no longer happens with custom metaclass + if prop == "schemaKey": + if "enum" in value and len(value["enum"]) == 1: + value["const"] = value["enum"][0] + del value["enum"] + else: + value["const"] = value["default"] + if "readOnly" in value: + del value["readOnly"] + + return schema + + +class PropertyValue(DandiBaseModel): + maxValue: Optional[float] = Field(None, json_schema_extra={"nskey": "schema"}) + minValue: Optional[float] = Field(None, json_schema_extra={"nskey": "schema"}) + unitText: Optional[str] = Field(None, json_schema_extra={"nskey": "schema"}) + value: Union[Any, List[Any]] = Field( + None, + validate_default=True, + json_schema_extra={"nskey": "schema"}, + description="The value associated with this property.", + ) + valueReference: Optional["PropertyValue"] = Field( + None, json_schema_extra={"nskey": "schema"} + ) # Note: recursive (circular or not) + propertyID: Optional[Union[IdentifierType, AnyHttpUrl]] = Field( + None, + description="A commonly used identifier for " + "the characteristic represented by the property. " + "For example, a known prefix like DOI or a full URL.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["PropertyValue"] = Field( + "PropertyValue", validate_default=True, json_schema_extra={"readOnly": True} + ) + + @field_validator("value") + @classmethod + def ensure_value(cls, val: Union[Any, List[Any]]) -> Union[Any, List[Any]]: + if not val: + raise ValueError( + "The value field of a PropertyValue cannot be None or empty." + ) + return val + + _ldmeta = {"nskey": "schema"} + + +# This is mostly not needed at all since self-referencing models +# are automatically resolved by Pydantic in a pretty consistent way even in Pydantic V1 +# https://docs.pydantic.dev/1.10/usage/postponed_annotations/#self-referencing-models +# and continue to be so in Pydantic V2 +# https://docs.pydantic.dev/latest/concepts/postponed_annotations/#self-referencing-or-recursive-models +PropertyValue.model_rebuild() + +Identifier = str +ORCID = str +RORID = str +DANDI = str +RRID = str + + +class BaseType(DandiBaseModel): + """Base class for enumerated types""" + + identifier: Optional[ + Annotated[ + Union[ + AnyHttpUrl, + Annotated[ + str, StringConstraints(pattern=r"^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\._]+$") + ], + ], + Field(union_mode="left_to_right"), + ] + ] = Field( + None, + description="The identifier can be any url or a compact URI, preferably" + " supported by identifiers.org.", + json_schema_extra={"nskey": "schema"}, + ) + name: Optional[str] = Field( + None, + description="The name of the item.", + max_length=150, + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: str = Field( + "BaseType", validate_default=True, json_schema_extra={"readOnly": True} + ) + _ldmeta = {"rdfs:subClassOf": ["prov:Entity", "schema:Thing"], "nskey": DANDI_NSKEY} + + @classmethod + def __get_pydantic_json_schema__( + cls, + core_schema_: CoreSchema, + handler: GetJsonSchemaHandler, + ) -> JsonSchemaValue: + schema = super().__get_pydantic_json_schema__(core_schema_, handler) + + for prop, value in schema.get("properties", {}).items(): + # This check removes the anyOf field from the identifier property + # in the schema generation. This relates to a UI issue where two + # basic properties, in this case "string", is dropped from the UI. + if prop == "identifier": + for option in value.pop("anyOf", []): + if option.get("format", "") == "uri": + value.update(**option) + value["maxLength"] = 1000 + + return schema + + +class AssayType(BaseType): + """OBI based identifier for the assay(s) used""" + + schemaKey: Literal["AssayType"] = Field( + "AssayType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class SampleType(BaseType): + """OBI based identifier for the sample type used""" + + schemaKey: Literal["SampleType"] = Field( + "SampleType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class Anatomy(BaseType): + """UBERON or other identifier for anatomical part studied""" + + schemaKey: Literal["Anatomy"] = Field( + "Anatomy", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class StrainType(BaseType): + """Identifier for the strain of the sample""" + + schemaKey: Literal["StrainType"] = Field( + "StrainType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class SexType(BaseType): + """Identifier for the sex of the sample""" + + schemaKey: Literal["SexType"] = Field( + "SexType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class SpeciesType(BaseType): + """Identifier for species of the sample""" + + schemaKey: Literal["SpeciesType"] = Field( + "SpeciesType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class Disorder(BaseType): + """Biolink, SNOMED, or other identifier for disorder studied""" + + dxdate: Optional[List[Union[date, datetime]]] = Field( + None, + title="Dates of diagnosis", + description="Dates of diagnosis", + json_schema_extra={"nskey": DANDI_NSKEY, "rangeIncludes": "schema:Date"}, + ) + schemaKey: Literal["Disorder"] = Field( + "Disorder", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class GenericType(BaseType): + """An object to capture any type for about""" + + schemaKey: Literal["GenericType"] = Field( + "GenericType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class ApproachType(BaseType): + """Identifier for approach used""" + + schemaKey: Literal["ApproachType"] = Field( + "ApproachType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class MeasurementTechniqueType(BaseType): + """Identifier for measurement technique used""" + + schemaKey: Literal["MeasurementTechniqueType"] = Field( + "MeasurementTechniqueType", + validate_default=True, + json_schema_extra={"readOnly": True}, + ) + + +class StandardsType(BaseType): + """Identifier for data standard used""" + + schemaKey: Literal["StandardsType"] = Field( + "StandardsType", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +nwb_standard = StandardsType( + name="Neurodata Without Borders (NWB)", + identifier="RRID:SCR_015242", +).model_dump(mode="json", exclude_none=True) + +bids_standard = StandardsType( + name="Brain Imaging Data Structure (BIDS)", + identifier="RRID:SCR_016124", +).model_dump(mode="json", exclude_none=True) + +ome_ngff_standard = StandardsType( + name="OME/NGFF Standard", + identifier="DOI:10.25504/FAIRsharing.9af712", +).model_dump(mode="json", exclude_none=True) + + +class ContactPoint(DandiBaseModel): + email: Optional[EmailStr] = Field( + None, + description="Email address of contact.", + json_schema_extra={"nskey": "schema"}, + ) + url: Optional[AnyHttpUrl] = Field( + None, + description="A Web page to find information on how to contact.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["ContactPoint"] = Field( + "ContactPoint", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = {"nskey": "schema"} + + +class Contributor(DandiBaseModel): + identifier: Optional[Identifier] = Field( + None, + title="A common identifier", + description="Use a common identifier such as ORCID (orcid.org) for " + "people or ROR (ror.org) for institutions.", + json_schema_extra={"nskey": "schema"}, + ) + name: Optional[str] = Field(None, json_schema_extra={"nskey": "schema"}) + email: Optional[EmailStr] = Field(None, json_schema_extra={"nskey": "schema"}) + url: Optional[AnyHttpUrl] = Field(None, json_schema_extra={"nskey": "schema"}) + roleName: Optional[List[RoleType]] = Field( + None, + title="Role", + description="Role(s) of the contributor. Multiple roles can be selected.", + json_schema_extra={"nskey": "schema"}, + ) + includeInCitation: bool = Field( + True, + title="Include contributor in citation", + description="A flag to indicate whether a contributor should be included " + "when generating a citation for the item.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + awardNumber: Optional[Identifier] = Field( + None, + title="Identifier for an award", + description="Identifier associated with a sponsored or gift award.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + schemaKey: Literal["Contributor", "Organization", "Person"] = Field( + "Contributor", validate_default=True, json_schema_extra={"readOnly": True} + ) + + @model_validator(mode="after") + def ensure_contact_person_has_email(self) -> Contributor: + role_names = self.roleName + + if role_names is not None and RoleType.ContactPerson in role_names: + if self.email is None: + raise ValueError("Contact person must have an email address.") + + return self + + +class Organization(Contributor): + identifier: Optional[RORID] = Field( + None, + title="A ror.org identifier", + description="Use an ror.org identifier for institutions.", + pattern=r"^https://ror.org/[a-z0-9]+$", + json_schema_extra={"nskey": "schema"}, + ) + + includeInCitation: bool = Field( + False, + title="Include contributor in citation", + description="A flag to indicate whether a contributor should be included " + "when generating a citation for the item", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + contactPoint: Optional[List[ContactPoint]] = Field( + None, + title="Organization contact information", + description="Contact for the organization", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["Organization"] = Field( + "Organization", validate_default=True, json_schema_extra={"readOnly": True} + ) + _ldmeta = { + "rdfs:subClassOf": ["schema:Organization", "prov:Organization"], + "nskey": DANDI_NSKEY, + } + + +class Affiliation(DandiBaseModel): + identifier: Optional[RORID] = Field( + None, + title="A ror.org identifier", + description="Use an ror.org identifier for institutions.", + pattern=r"^https://ror.org/[a-z0-9]+$", + json_schema_extra={"nskey": "schema"}, + ) + name: str = Field( + json_schema_extra={"nskey": "schema"}, description="Name of organization" + ) + schemaKey: Literal["Affiliation"] = Field( + "Affiliation", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:Organization", "prov:Organization"], + "nskey": DANDI_NSKEY, + } + + +class Person(Contributor): + identifier: Optional[ORCID] = Field( + None, + title="An ORCID identifier", + description="An ORCID (orcid.org) identifier for an individual.", + pattern=r"^\d{4}-\d{4}-\d{4}-(\d{3}X|\d{4})$", + json_schema_extra={"nskey": "schema"}, + ) + name: str = Field( + title="Use Last, First. Example: Lovelace, Augusta Ada", + description="Use the format: familyname, given names ...", + pattern=NAME_PATTERN, + json_schema_extra={"nskey": "schema"}, + ) + affiliation: Optional[List[Affiliation]] = Field( + None, + description="An organization that this person is affiliated with.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["Person"] = Field( + "Person", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:Person", "prov:Person"], + "nskey": DANDI_NSKEY, + } + + +class Software(DandiBaseModel): + identifier: Optional[RRID] = Field( + None, + pattern=r"^RRID:.*", + title="Research resource identifier", + description="RRID of the software from scicrunch.org.", + json_schema_extra={"nskey": "schema"}, + ) + name: str = Field(json_schema_extra={"nskey": "schema"}) + version: str = Field(json_schema_extra={"nskey": "schema"}) + url: Optional[AnyHttpUrl] = Field( + None, + description="Web page for the software.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["Software"] = Field( + "Software", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:SoftwareApplication", "prov:Software"], + "nskey": DANDI_NSKEY, + } + + +class Agent(DandiBaseModel): + identifier: Optional[Identifier] = Field( + None, + title="Identifier", + description="Identifier for an agent.", + json_schema_extra={"nskey": "schema"}, + ) + name: str = Field( + json_schema_extra={"nskey": "schema"}, + ) + url: Optional[AnyHttpUrl] = Field(None, json_schema_extra={"nskey": "schema"}) + schemaKey: Literal["Agent"] = Field( + "Agent", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["prov:Agent"], + "nskey": DANDI_NSKEY, + } + + +class EthicsApproval(DandiBaseModel): + """Information about ethics committee approval for project""" + + identifier: Identifier = Field( + json_schema_extra={"nskey": "schema"}, + title="Approved protocol identifier", + description="Approved Protocol identifier, often a number or alphanumeric string.", + ) + contactPoint: Optional[ContactPoint] = Field( + None, + description="Information about the ethics approval committee.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["EthicsApproval"] = Field( + "EthicsApproval", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = {"rdfs:subClassOf": ["schema:Thing", "prov:Entity"], "nskey": DANDI_NSKEY} + + +class Resource(DandiBaseModel): + identifier: Optional[Identifier] = Field( + None, json_schema_extra={"nskey": "schema"} + ) + name: Optional[str] = Field( + None, title="A title of the resource", json_schema_extra={"nskey": "schema"} + ) + url: Optional[AnyHttpUrl] = Field( + None, title="URL of the resource", json_schema_extra={"nskey": "schema"} + ) + repository: Optional[str] = Field( + None, + title="Name of the repository", + description="Name of the repository in which the resource is housed.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + relation: RelationType = Field( + title="Resource relation", + description="Indicates how the resource is related to the dataset. " + "This relation should satisfy: dandiset resource.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + resourceType: Optional[ResourceType] = Field( + default=None, + title="Resource type", + description="The type of resource.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + + schemaKey: Literal["Resource"] = Field( + "Resource", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], + "rdfs:comment": "A resource related to the project (e.g., another " + "dataset, publication, Webpage)", + "nskey": DANDI_NSKEY, + } + + @model_validator(mode="after") + def identifier_or_url(self) -> "Resource": + identifier, url = self.identifier, self.url + if identifier is None and url is None: + raise ValueError("Both identifier and url cannot be None") + return self + + +class AccessRequirements(DandiBaseModel): + """Information about access options for the dataset""" + + status: AccessType = Field( + title="Access status", + description="The access status of the item.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + contactPoint: Optional[ContactPoint] = Field( + None, + description="Who or where to look for information about access.", + json_schema_extra={"nskey": "schema"}, + ) + description: Optional[str] = Field( + None, + description="Information about access requirements when embargoed or restricted", + json_schema_extra={"nskey": "schema"}, + ) + embargoedUntil: Optional[date] = Field( + None, + title="Embargo end date", + description="Date on which embargo ends.", + json_schema_extra={ + "readOnly": True, + "nskey": DANDI_NSKEY, + "rangeIncludes": "schema:Date", + }, + ) + schemaKey: Literal["AccessRequirements"] = Field( + "AccessRequirements", + validate_default=True, + json_schema_extra={"readOnly": True}, + ) + + _ldmeta = {"rdfs:subClassOf": ["schema:Thing", "prov:Entity"], "nskey": DANDI_NSKEY} + + @model_validator(mode="after") + def open_or_embargoed(self) -> "AccessRequirements": + status, embargoed = self.status, self.embargoedUntil + if status == AccessType.EmbargoedAccess and embargoed is None: + raise ValueError( + "An embargo end date is required for NIH awards to be in " + "compliance with NIH resource sharing policy." + ) + return self + + +class AssetsSummary(DandiBaseModel): + """Summary over assets contained in a dandiset (published or not)""" + + # stats which are not stats + numberOfBytes: int = Field( + json_schema_extra={"readOnly": True, "sameas": "schema:contentSize"} + ) + numberOfFiles: int = Field(json_schema_extra={"readOnly": True}) # universe + numberOfSubjects: Optional[int] = Field( + None, json_schema_extra={"readOnly": True} + ) # NWB + BIDS + numberOfSamples: Optional[int] = Field( + None, json_schema_extra={"readOnly": True} + ) # more of NWB + numberOfCells: Optional[int] = Field(None, json_schema_extra={"readOnly": True}) + + dataStandard: Optional[List[StandardsType]] = Field( + None, json_schema_extra={"readOnly": True} + ) + # Web UI: icons per each modality? + approach: Optional[List[ApproachType]] = Field( + None, json_schema_extra={"readOnly": True} + ) + # Web UI: could be an icon with number, which if hovered on show a list? + measurementTechnique: Optional[List[MeasurementTechniqueType]] = Field( + None, json_schema_extra={"readOnly": True, "nskey": "schema"} + ) + variableMeasured: Optional[List[str]] = Field( + None, json_schema_extra={"readOnly": True, "nskey": "schema"} + ) + + species: Optional[List[SpeciesType]] = Field( + None, json_schema_extra={"readOnly": True} + ) + schemaKey: Literal["AssetsSummary"] = Field( + "AssetsSummary", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], + "nskey": DANDI_NSKEY, + } + + +class Equipment(DandiBaseModel): + identifier: Optional[Identifier] = Field( + None, json_schema_extra={"nskey": "schema"} + ) + name: str = Field( + title="Title", + description="A name for the equipment.", + max_length=150, + json_schema_extra={"nskey": "schema"}, + ) + description: Optional[str] = Field( + None, + description="The description of the equipment.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["Equipment"] = Field( + "Equipment", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], + "nskey": DANDI_NSKEY, + } + + +class Activity(DandiBaseModel): + """Information about the Project activity""" + + identifier: Optional[Identifier] = Field( + None, json_schema_extra={"nskey": "schema"} + ) + name: str = Field( + title="Title", + description="The name of the activity.", + max_length=150, + json_schema_extra={"nskey": "schema"}, + ) + description: Optional[str] = Field( + None, + description="The description of the activity.", + json_schema_extra={"nskey": "schema"}, + ) + startDate: Optional[datetime] = Field(None, json_schema_extra={"nskey": "schema"}) + endDate: Optional[datetime] = Field(None, json_schema_extra={"nskey": "schema"}) + + # isPartOf: Optional["Activity"] = Field(None, json_schema_extra={"nskey": "schema"}) + # hasPart: Optional["Activity"] = Field(None, json_schema_extra={"nskey": "schema"}) + wasAssociatedWith: Optional[List[Union[Person, Organization, Software, Agent],]] = ( + Field(None, json_schema_extra={"nskey": "prov"}) + ) + used: Optional[List[Equipment]] = Field( + None, + description="A listing of equipment used for the activity.", + json_schema_extra={"nskey": "prov"}, + ) + schemaKey: Literal["Activity", "Project", "Session", "PublishActivity"] = Field( + "Activity", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["prov:Activity", "schema:Thing"], + "nskey": DANDI_NSKEY, + } + + +class Project(Activity): + name: str = Field( + title="Name of project", + description="The name of the project that generated this Dandiset or asset.", + max_length=150, + json_schema_extra={"nskey": "schema"}, + ) + description: Optional[str] = Field( + None, + description="A brief description of the project.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["Project"] = Field( + "Project", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class Session(Activity): + name: str = Field( + title="Name of session", + description="The name of the logical session associated with the asset.", + max_length=150, + json_schema_extra={"nskey": "schema"}, + ) + description: Optional[str] = Field( + None, + description="A brief description of the session.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["Session"] = Field( + "Session", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class PublishActivity(Activity): + schemaKey: Literal["PublishActivity"] = Field( + "PublishActivity", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class Locus(DandiBaseModel): + identifier: Union[Identifier, List[Identifier]] = Field( + description="Identifier for genotyping locus.", + json_schema_extra={"nskey": "schema"}, + ) + locusType: Optional[str] = Field(None) + schemaKey: Literal["Locus"] = Field( + "Locus", validate_default=True, json_schema_extra={"readOnly": True} + ) + _ldmeta = {"nskey": DANDI_NSKEY} + + +class Allele(DandiBaseModel): + identifier: Union[Identifier, List[Identifier]] = Field( + description="Identifier for genotyping allele.", + json_schema_extra={"nskey": "schema"}, + ) + alleleSymbol: Optional[str] = Field(None) + alleleType: Optional[str] = Field(None) + schemaKey: Literal["Allele"] = Field( + "Allele", validate_default=True, json_schema_extra={"readOnly": True} + ) + _ldmeta = {"nskey": DANDI_NSKEY} + + +class GenotypeInfo(DandiBaseModel): + locus: Locus = Field(description="Locus at which information was extracted.") + alleles: List[Allele] = Field(description="Information about alleles at the locus.") + wasGeneratedBy: Optional[List["Session"]] = Field( + None, + description="Information about session activity used to determine genotype.", + json_schema_extra={"nskey": "prov"}, + ) + schemaKey: Literal["GenotypeInfo"] = Field( + "GenotypeInfo", validate_default=True, json_schema_extra={"readOnly": True} + ) + _ldmeta = {"nskey": DANDI_NSKEY} + + +class RelatedParticipant(DandiBaseModel): + identifier: Optional[Identifier] = Field( + None, json_schema_extra={"nskey": "schema"} + ) + name: Optional[str] = Field( + None, + title="Name of the participant or subject", + json_schema_extra={"nskey": "schema"}, + ) + url: Optional[AnyHttpUrl] = Field( + None, + title="URL of the related participant or subject", + json_schema_extra={"nskey": "schema"}, + ) + relation: ParticipantRelationType = Field( + title="Participant or subject relation", + description="Indicates how the current participant or subject is related " + "to the other participant or subject. This relation should " + "satisfy: Participant/Subject relatedParticipant/Subject.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + schemaKey: Literal["RelatedParticipant"] = Field( + "RelatedParticipant", + validate_default=True, + json_schema_extra={"readOnly": True}, + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], + "rdfs:comment": "Another participant or subject related to the current " + "participant or subject (e.g., another parent, sibling, child).", + "nskey": DANDI_NSKEY, + } + + +class Participant(DandiBaseModel): + """Description about the Participant or Subject studied. + + The Participant or Subject can be any individual or synthesized Agent. The + properties of the Participant or Subject refers to information at the timepoint + when the Participant or Subject engaged in the production of data being described. + """ + + identifier: Identifier = Field(json_schema_extra={"nskey": "schema"}) + altName: Optional[List[Identifier]] = Field( + None, json_schema_extra={"nskey": DANDI_NSKEY} + ) + + strain: Optional[StrainType] = Field( + None, + description="Identifier for the strain of the participant or subject.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + cellLine: Optional[Identifier] = Field( + None, + description="Cell line associated with the participant or subject.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + vendor: Optional[Organization] = Field( + None, json_schema_extra={"nskey": DANDI_NSKEY} + ) + age: Optional[PropertyValue] = Field( + None, + description="A representation of age using ISO 8601 duration. This " + "should include a valueReference if anything other than " + "date of birth is used.", + json_schema_extra={"nskey": DANDI_NSKEY, "rangeIncludes": "schema:Duration"}, + ) + + sex: Optional[SexType] = Field( + None, + description="Identifier for sex of the participant or subject if " + "available. (e.g. from OBI)", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + genotype: Optional[Union[List[GenotypeInfo], Identifier]] = Field( + None, + description="Genotype descriptor of participant or subject if available", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + species: Optional[SpeciesType] = Field( + None, + description="An identifier indicating the taxonomic classification of " + "the participant or subject.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + disorder: Optional[List[Disorder]] = Field( + None, + description="Any current diagnosed disease or disorder associated with " + "the participant or subject.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + + relatedParticipant: Optional[List[RelatedParticipant]] = Field( + None, + description="Information about related participants or subjects in a " + "study or across studies.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + sameAs: Optional[List[Identifier]] = Field( + None, + description="An identifier to link participants or subjects across datasets.", + json_schema_extra={"nskey": "schema"}, + ) + schemaKey: Literal["Participant"] = Field( + "Participant", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["prov:Agent"], + "rdfs:label": "Information about the participant or subject.", + "nskey": DANDI_NSKEY, + } + + +class BioSample(DandiBaseModel): + """Description of the sample that was studied""" + + identifier: Identifier = Field(json_schema_extra={"nskey": "schema"}) + sampleType: SampleType = Field( + description="Identifier for the sample characteristics (e.g., from OBI, Encode).", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + assayType: Optional[List[AssayType]] = Field( + None, + description="Identifier for the assay(s) used (e.g., OBI).", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + anatomy: Optional[List[Anatomy]] = Field( + None, + description="Identifier for what organ the sample belongs " + "to. Use the most specific descriptor from sources such as UBERON.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + + wasDerivedFrom: Optional[List["BioSample"]] = Field( + None, + description="Describes the hierarchy of sample derivation or aggregation.", + json_schema_extra={"nskey": "prov"}, + ) + wasAttributedTo: Optional[List[Participant]] = Field( + None, + description="Participant(s) or Subject(s) associated with this sample.", + json_schema_extra={"nskey": "prov"}, + ) + sameAs: Optional[List[Identifier]] = Field( + None, json_schema_extra={"nskey": "schema"} + ) + hasMember: Optional[List[Identifier]] = Field( + None, json_schema_extra={"nskey": "prov"} + ) + schemaKey: Literal["BioSample"] = Field( + "BioSample", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:Thing", "prov:Entity"], + "rdfs:label": "Information about the biosample.", + "nskey": DANDI_NSKEY, + } + + +# This is mostly not needed at all since self-referencing models +# are automatically resolved by Pydantic in a pretty consistent way even in Pydantic V1 +# https://docs.pydantic.dev/1.10/usage/postponed_annotations/#self-referencing-models +# and continue to be so in Pydantic V2 +# https://docs.pydantic.dev/latest/concepts/postponed_annotations/#self-referencing-or-recursive-models +BioSample.model_rebuild() + + +class CommonModel(DandiBaseModel): + schemaVersion: str = Field( + default=DANDI_SCHEMA_VERSION, + json_schema_extra={"readOnly": True, "nskey": "schema"}, + ) + name: Optional[str] = Field( + None, + title="Title", + description="The name of the item.", + max_length=150, + json_schema_extra={"nskey": "schema"}, + ) + description: Optional[str] = Field( + None, + description="A description of the item.", + json_schema_extra={"nskey": "schema"}, + ) + contributor: Optional[List[Union[Person, Organization]]] = Field( + None, + title="Contributors", + description="Contributors to this item: persons or organizations.", + json_schema_extra={"nskey": "schema"}, + ) + about: Optional[List[Union[Disorder, Anatomy, GenericType]]] = Field( + None, + title="Subject matter of the dataset", + description="The subject matter of the content, such as disorders, brain anatomy.", + json_schema_extra={"nskey": "schema"}, + ) + studyTarget: Optional[List[str]] = Field( + None, + description="Objectives or specific questions of the study.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + license: Optional[List[LicenseType]] = Field( + None, + description="Licenses associated with the item. DANDI only supports a " + "subset of Creative Commons Licenses (creativecommons.org) " + "applicable to datasets.", + json_schema_extra={"nskey": "schema"}, + ) + protocol: Optional[List[AnyHttpUrl]] = Field( + None, + description="A list of persistent URLs describing the protocol (e.g. " + "protocols.io, or other DOIs).", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + ethicsApproval: Optional[List[EthicsApproval]] = Field( + None, title="Ethics approvals", json_schema_extra={"nskey": DANDI_NSKEY} + ) + keywords: Optional[List[str]] = Field( + None, + description="Keywords used to describe this content.", + json_schema_extra={"nskey": "schema"}, + ) + acknowledgement: Optional[str] = Field( + None, + description="Any acknowledgments not covered by contributors or external resources.", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + + # Linking to this dandiset or the larger thing + access: List[AccessRequirements] = Field( + title="Access information", + default_factory=lambda: [AccessRequirements(status=AccessType.OpenAccess)], + json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True}, + ) + url: Optional[AnyHttpUrl] = Field( + None, + description="permalink to the item", + json_schema_extra={"readOnly": True, "nskey": "schema"}, + ) + repository: Optional[AnyHttpUrl] = Field( + default=_INSTANCE_CONFIG.instance_url, + description="location of the item", + json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True}, + ) + relatedResource: Optional[List[Resource]] = Field( + None, json_schema_extra={"nskey": DANDI_NSKEY} + ) + + wasGeneratedBy: Optional[Sequence[Activity]] = Field( + None, json_schema_extra={"nskey": "prov"} + ) + schemaKey: str = Field( + "CommonModel", validate_default=True, json_schema_extra={"readOnly": True} + ) + + +class Dandiset(CommonModel): + """A body of structured information describing a DANDI dataset.""" + + model_config = ConfigDict(extra="allow") + + @field_validator("contributor") + @classmethod + def contributor_musthave_contact( + cls, values: List[Union[Person, Organization]] + ) -> List[Union[Person, Organization]]: + contacts = [] + for val in values: + if val.roleName and RoleType.ContactPerson in val.roleName: + contacts.append(val) + if len(contacts) == 0: + raise ValueError("At least one contributor must have role ContactPerson") + return values + + id: str = Field( + description="Uniform resource identifier", + pattern=( + rf"^({ID_PATTERN}|{ID_PATTERN.lower()}):\d{{6}}(/(draft|{VERSION_NUM_PATTERN}))$" + ), + json_schema_extra={"readOnly": True}, + ) + + identifier: DANDI = Field( + title="Dandiset identifier", + description="A Dandiset identifier that can be resolved by identifiers.org.", + pattern=rf"^{ID_PATTERN}:\d{{6}}$", + json_schema_extra={"readOnly": True, "nskey": "schema"}, + ) + + sameAs: Annotated[ + Optional[ + list[ + Annotated[ + str, + StringConstraints( + pattern=( + rf"^dandi://{UNVENDORED_ID_PATTERN}/\d{{6}}" + rf"(@(draft|{VERSION_NUM_PATTERN}))?(/\S+)?$" + ) + ), + ] + ] + ], + Field( + default=None, + description="Known DANDI URLs of the Dandiset at other DANDI instances.", + json_schema_extra={"nskey": "schema"}, + ), + ] + + name: str = Field( + title="Dandiset title", + description="A title associated with the Dandiset.", + max_length=150, + json_schema_extra={"nskey": "schema"}, + ) + description: str = Field( + description="A description of the Dandiset", + max_length=10000, + json_schema_extra={"nskey": "schema"}, + ) + contributor: List[Union[Person, Organization]] = Field( + title="Dandiset contributors", + description="People or Organizations that have contributed to this Dandiset.", + json_schema_extra={"nskey": "schema"}, + min_length=1, + ) + dateCreated: Optional[datetime] = Field( + None, + json_schema_extra={"nskey": "schema", "readOnly": True}, + title="Dandiset creation date and time.", + ) + dateModified: Optional[datetime] = Field( + None, + json_schema_extra={"nskey": "schema", "readOnly": True}, + title="Last modification date and time.", + ) + + license: List[LicenseType] = Field( + min_length=1, + description="Licenses associated with the item. DANDI only supports a " + "subset of Creative Commons Licenses (creativecommons.org) " + "applicable to datasets.", + json_schema_extra={"nskey": "schema"}, + ) + + citation: str = Field(json_schema_extra={"readOnly": True, "nskey": "schema"}) + + # From assets + assetsSummary: AssetsSummary = Field( + json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True} + ) + + # From server (requested by users even for drafts) + manifestLocation: List[AnyHttpUrl] = Field( + min_length=1, json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True} + ) + + version: str = Field(json_schema_extra={"nskey": "schema", "readOnly": True}) + + # Publication-related fields. A non-``None`` ``datePublished`` marks the + # record as published; ``check_publication_status`` enforces the rules. + url: Optional[AnyHttpUrl] = Field( + None, + description="Permalink to the Dandiset.", + json_schema_extra={"readOnly": True, "nskey": "schema"}, + ) + doi: Optional[str] = Field( + None, + title="DOI", + pattern=DANDI_DOI_PATTERN, + json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY}, + ) + """The DOI of the published Dandiset. + + The empty string indicates that there is no DOI for the published Dandiset; + it is set automatically for a published Dandiset on a DANDI instance with no + configured DOI prefix. + """ + publishedBy: Optional[Union[AnyHttpUrl, PublishActivity]] = Field( + None, + description="The URL should contain the provenance of the publishing process.", + json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY}, + ) + datePublished: Optional[datetime] = Field( + None, json_schema_extra={"readOnly": True, "nskey": "schema"} + ) + releaseNotes: Optional[str] = Field( + None, + description="The description of the release", + json_schema_extra={"readOnly": True, "nskey": "schema"}, + ) + + wasGeneratedBy: Optional[Sequence[Project]] = Field( + None, + title="Associated projects", + description="Project(s) that generated this Dandiset.", + json_schema_extra={"nskey": "prov"}, + ) + + schemaKey: Literal["Dandiset"] = Field( + "Dandiset", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:Dataset", "prov:Entity"], + "rdfs:label": "Information about the dataset", + "nskey": DANDI_NSKEY, + } + + @model_validator(mode="after") + def check_publication_status(self) -> Self: + """Enforce publication coherence keyed on ``datePublished``. + + A non-``None`` ``datePublished`` marks the record as published and + triggers the published-Dandiset requirements; otherwise the publication-only + fields must be absent. Each violation is reported against its own field. + """ + line_errors: list[InitErrorDetails] = [] + + def err(field: str, msg: str) -> None: + line_errors.append( + InitErrorDetails( + type="value_error", + loc=(field,), + input=getattr(self, field), + ctx={"error": msg}, + ) + ) + + if self.datePublished is None: + for name in ("doi", "publishedBy", "releaseNotes"): + if getattr(self, name) is not None: + err(name, f"{name} is not allowed unless datePublished is set") + else: + if self.publishedBy is None: + err("publishedBy", "publishedBy is required for a published Dandiset") + if self.url is None: + err("url", "url is required for a published Dandiset") + elif not re.match(PUBLISHED_VERSION_URL_PATTERN, str(self.url)): + err( + "url", f'url does not match regex "{PUBLISHED_VERSION_URL_PATTERN}"' + ) + # Stricter than the ``id`` field pattern, which also accepts + # ``/draft`` and a lowercase prefix; only a published version id + # passes here. + if not re.match(DANDI_PUBID_PATTERN, self.id): + err( + "id", + f'id "{self.id}" does not match the published-Dandiset pattern ' + f'"{DANDI_PUBID_PATTERN}"', + ) + if ( + self.assetsSummary.numberOfBytes == 0 + or self.assetsSummary.numberOfFiles == 0 + ): + err( + "assetsSummary", + "A Dandiset containing no files or zero bytes is not publishable", + ) + if self.doi is None: + if _INSTANCE_CONFIG.doi_prefix is None: + self.doi = "" + else: + err("doi", "doi is required for a published Dandiset") + if line_errors: + raise _CoreValidationError.from_exception_data( + self.__class__.__name__, line_errors + ) + return self + + +class BareAsset(CommonModel): + """Metadata used to describe an asset anywhere (local or server). + + Derived from C2M2 (Level 0 and 1) and schema.org + """ + + contentSize: ByteSizeJsonSchema = Field(json_schema_extra={"nskey": "schema"}) + encodingFormat: Union[AnyHttpUrl, str] = Field( + title="File encoding format", json_schema_extra={"nskey": "schema"} + ) + digest: Dict[DigestType, str] = Field( + title="A map of dandi digests to their values", + json_schema_extra={"nskey": DANDI_NSKEY}, + ) + path: str = Field(json_schema_extra={"nskey": DANDI_NSKEY}) + + dateModified: Optional[datetime] = Field( + None, + json_schema_extra={"nskey": "schema"}, + title="Asset (file or metadata) modification date and time", + ) + blobDateModified: Optional[datetime] = Field( + None, + json_schema_extra={"nskey": DANDI_NSKEY}, + title="Asset file modification date and time.", + ) + # overload to restrict with max_items=1 + access: List[AccessRequirements] = Field( + title="Access information", + default_factory=lambda: [AccessRequirements(status=AccessType.OpenAccess)], + json_schema_extra={"nskey": DANDI_NSKEY, "readOnly": True}, + max_length=1, + ) + + # this is from C2M2 level 1 - using EDAM vocabularies - in our case we would + # need to come up with things for neurophys + # TODO: waiting on input + dataType: Optional[AnyHttpUrl] = Field( + None, json_schema_extra={"nskey": DANDI_NSKEY} + ) + + sameAs: Optional[List[AnyHttpUrl]] = Field( + None, json_schema_extra={"nskey": "schema"} + ) + + # TODO + approach: Optional[List[ApproachType]] = Field( + None, json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY} + ) + measurementTechnique: Optional[List[MeasurementTechniqueType]] = Field( + None, json_schema_extra={"readOnly": True, "nskey": "schema"} + ) + variableMeasured: Optional[List[PropertyValue]] = Field( + None, json_schema_extra={"readOnly": True, "nskey": "schema"} + ) + + wasDerivedFrom: Optional[List[BioSample]] = Field( + None, json_schema_extra={"nskey": "prov"} + ) + wasAttributedTo: Optional[List[Participant]] = Field( + None, + description="Associated participant(s) or subject(s).", + json_schema_extra={"nskey": "prov"}, + ) + wasGeneratedBy: Optional[List[Union[Session, Project, Activity]]] = Field( + None, + title="Name of the session, project or activity.", + description="Describe the session, project or activity that generated this asset.", + json_schema_extra={"nskey": "prov"}, + ) + + schemaKey: Literal["BareAsset"] = Field( + "BareAsset", validate_default=True, json_schema_extra={"readOnly": True} + ) + + _ldmeta = { + "rdfs:subClassOf": ["schema:CreativeWork", "prov:Entity"], + "rdfs:label": "Information about the asset", + "nskey": DANDI_NSKEY, + } + + @field_validator("digest") + @classmethod + def digest_check( + cls, v: Dict[DigestType, str], info: ValidationInfo + ) -> Dict[DigestType, str]: + values = info.data + if values.get("encodingFormat") == "application/x-zarr": + if DigestType.dandi_zarr_checksum not in v: + raise ValueError("A zarr asset must have a zarr checksum.") + if v.get(DigestType.dandi_etag): + raise ValueError("Digest cannot have both etag and zarr checksums.") + digest = v[DigestType.dandi_zarr_checksum] + try: + chksum = ZarrDirectoryDigest.parse(digest) + except InvalidZarrChecksum: + raise ValueError( + "Digest must have an appropriate dandi-zarr-checksum value." + f" Got {digest}" + ) + zarr_size = chksum.size + content_size = values.get("contentSize") + if content_size != zarr_size: + raise ValueError( + f"contentSize {content_size} is not equal to the checksum size {zarr_size}." + ) + else: + if DigestType.dandi_etag not in v: + raise ValueError("A non-zarr asset must have a dandi-etag.") + if v.get(DigestType.dandi_zarr_checksum): + raise ValueError("Digest cannot have both etag and zarr checksums.") + digest = v[DigestType.dandi_etag] + if not re.fullmatch(DandiETag.REGEX, digest): + raise ValueError( + f"Digest must have an appropriate dandi-etag value. " + f"Got {digest}" + ) + return v + + +class Asset(BareAsset): + """Metadata used to describe an asset on the server.""" + + # A non-``None`` ``datePublished`` marks the asset as published; see + # ``check_publication_status`` for the rules that then apply. + + # all of the following are set by server + id: str = Field( + json_schema_extra={"readOnly": True}, description="Uniform resource identifier." + ) + identifier: UUID4 = Field(json_schema_extra={"readOnly": True, "nskey": "schema"}) + contentUrl: List[AnyHttpUrl] = Field( + json_schema_extra={"readOnly": True, "nskey": "schema"} + ) + + # Publication-related fields. Present only on a published asset, i.e. when + # ``datePublished`` is set. + publishedBy: Optional[Union[AnyHttpUrl, PublishActivity]] = Field( + None, + description="The URL should contain the provenance of the publishing process.", + json_schema_extra={"readOnly": True, "nskey": DANDI_NSKEY}, + ) + datePublished: Optional[datetime] = Field( + None, json_schema_extra={"readOnly": True, "nskey": "schema"} + ) + + # mypy flags the narrowed Literal as an incompatible override of + # BareAsset's, but pydantic allows it and ensure_schemakey pins each + # instance to its class name at runtime. + schemaKey: Literal["Asset"] = Field( # type: ignore[assignment] + "Asset", validate_default=True, json_schema_extra={"readOnly": True} + ) + + @model_validator(mode="after") + def check_publication_status(self) -> Self: + """Enforce publication coherence keyed on ``datePublished``. + + A non-``None`` ``datePublished`` marks the asset as published and + triggers the published-asset requirements; otherwise ``publishedBy`` + must be absent. Each violation is reported against its own field. + """ + line_errors: list[InitErrorDetails] = [] + + def err(field: str, msg: str) -> None: + line_errors.append( + InitErrorDetails( + type="value_error", + loc=(field,), + input=getattr(self, field), + ctx={"error": msg}, + ) + ) + + if self.datePublished is None: + if self.publishedBy is not None: + err( + "publishedBy", + "publishedBy is not allowed unless datePublished is set", + ) + else: + if self.publishedBy is None: + err("publishedBy", "publishedBy is required for a published asset") + if not re.match(ASSET_UUID_PATTERN, self.id): + err( + "id", + f'id "{self.id}" does not match the published-asset pattern ' + f'"{ASSET_UUID_PATTERN}"', + ) + if self.encodingFormat != "application/x-zarr": + if DigestType.sha2_256 not in self.digest: + err("digest", "A non-zarr asset must have a sha2_256.") + else: + sha2_256_digest = self.digest[DigestType.sha2_256] + if not re.fullmatch(SHA256_PATTERN, sha2_256_digest): + err( + "digest", + "Digest must have an appropriate sha2_256 value. " + f"Got {sha2_256_digest}", + ) + if line_errors: + raise _CoreValidationError.from_exception_data( + self.__class__.__name__, line_errors + ) + return self + + +# ``PublishedDandiset`` and ``PublishedAsset`` were consolidated into +# ``Dandiset`` and ``Asset`` respectively: a record is "published" when its +# ``datePublished`` is set (see each class's ``check_publication_status``). +# These names are kept as deprecated aliases for backward compatibility and +# will be removed in a future release. +PublishedDandiset = Dandiset +PublishedAsset = Asset + + +def get_schema_version() -> str: + return DANDI_SCHEMA_VERSION diff --git a/dandischema/models_pydantic/asset.json b/dandischema/models_pydantic/asset.json new file mode 100644 index 00000000..425ae11b --- /dev/null +++ b/dandischema/models_pydantic/asset.json @@ -0,0 +1,4431 @@ +{ + "$defs": { + "AccessRequirements": { + "additionalProperties": false, + "description": "Information about access options for the dataset", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AccessRequirements", + "default": "AccessRequirements", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Who or where to look for information about access.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "description": { + "default": null, + "description": "Information about access requirements when embargoed or restricted", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "embargoedUntil": { + "default": null, + "description": "Date on which embargo ends.", + "format": "date", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Embargo end date", + "type": "string" + }, + "status": { + "$ref": "#/$defs/AccessType", + "description": "The access status of the item.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ] + }, + "title": "Access status" + } + }, + "required": [ + "status" + ], + "title": "AccessRequirements", + "type": "object" + }, + "AccessType": { + "description": "An enumeration of access status options", + "enum": [ + "dandi:OpenAccess", + "dandi:EmbargoedAccess" + ], + "title": "AccessType", + "type": "string" + }, + "Activity": { + "additionalProperties": false, + "description": "Information about the Project activity", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Activity", + "default": "Activity", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the activity.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the activity.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Activity", + "type": "object" + }, + "Affiliation": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Affiliation", + "default": "Affiliation", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "name": { + "description": "Name of organization", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Affiliation", + "type": "object" + }, + "Agent": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Agent", + "default": "Agent", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Identifier for an agent.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Agent", + "type": "object" + }, + "Allele": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Allele", + "default": "Allele", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "alleleSymbol": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Allele" + ] + }, + "title": "Allelesymbol", + "type": "string" + }, + "alleleType": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Allele" + ] + }, + "title": "Alleletype", + "type": "string" + }, + "identifier": { + "description": "Identifier for genotyping allele.", + "linkml_meta": { + "any_of": [ + { + "range": "string" + }, + { + "multivalued": true, + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "Allele", + "type": "object" + }, + "Anatomy": { + "additionalProperties": false, + "description": "UBERON or other identifier for anatomical part studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Anatomy", + "default": "Anatomy", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "Anatomy", + "type": "object" + }, + "ApproachType": { + "additionalProperties": false, + "description": "Identifier for approach used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ApproachType", + "default": "ApproachType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "ApproachType", + "type": "object" + }, + "AssayType": { + "additionalProperties": false, + "description": "OBI based identifier for the assay(s) used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AssayType", + "default": "AssayType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "AssayType", + "type": "object" + }, + "BioSample": { + "additionalProperties": false, + "description": "Description of the sample that was studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "BioSample", + "default": "BioSample", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "anatomy": { + "default": null, + "description": "Identifier for what organ the sample belongs to. Use the most specific descriptor from sources such as UBERON.", + "items": { + "$ref": "#/$defs/Anatomy" + }, + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + }, + "title": "Anatomy", + "type": "array" + }, + "assayType": { + "default": null, + "description": "Identifier for the assay(s) used (e.g., OBI).", + "items": { + "$ref": "#/$defs/AssayType" + }, + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + }, + "title": "Assaytype", + "type": "array" + }, + "hasMember": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + }, + "title": "Hasmember", + "type": "array" + }, + "identifier": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "sameAs": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ] + }, + "title": "Sameas", + "type": "array" + }, + "sampleType": { + "$ref": "#/$defs/SampleType", + "description": "Identifier for the sample characteristics (e.g., from OBI, Encode).", + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + } + }, + "wasAttributedTo": { + "default": null, + "description": "Participant(s) or Subject(s) associated with this sample.", + "items": { + "$ref": "#/$defs/Participant" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasattributedto", + "type": "array" + }, + "wasDerivedFrom": { + "default": null, + "description": "Describes the hierarchy of sample derivation or aggregation.", + "items": { + "$ref": "#/$defs/BioSample" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasderivedfrom", + "type": "array" + } + }, + "required": [ + "identifier", + "sampleType" + ], + "title": "BioSample", + "type": "object" + }, + "ContactPoint": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ContactPoint", + "default": "ContactPoint", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "email": { + "default": null, + "description": "Email address of contact.", + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "url": { + "default": null, + "description": "A Web page to find information on how to contact.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "title": "ContactPoint", + "type": "object" + }, + "Disorder": { + "additionalProperties": false, + "description": "Biolink, SNOMED, or other identifier for disorder studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Disorder", + "default": "Disorder", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "dxdate": { + "default": null, + "description": "Dates of diagnosis", + "items": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "date" + }, + { + "range": "datetime" + } + ], + "domain_of": [ + "Disorder" + ] + }, + "title": "Dates of diagnosis", + "type": "array" + } + }, + "title": "Disorder", + "type": "object" + }, + "Equipment": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Equipment", + "default": "Equipment", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the equipment.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "A name for the equipment.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Equipment", + "type": "object" + }, + "EthicsApproval": { + "additionalProperties": false, + "description": "Information about ethics committee approval for project", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "EthicsApproval", + "default": "EthicsApproval", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Information about the ethics approval committee.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "identifier": { + "description": "Approved Protocol identifier, often a number or alphanumeric string.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Approved protocol identifier", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "EthicsApproval", + "type": "object" + }, + "GenericType": { + "additionalProperties": false, + "description": "An object to capture any type for about", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "GenericType", + "default": "GenericType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "GenericType", + "type": "object" + }, + "GenotypeInfo": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "GenotypeInfo", + "default": "GenotypeInfo", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "alleles": { + "description": "Information about alleles at the locus.", + "items": { + "$ref": "#/$defs/Allele" + }, + "linkml_meta": { + "domain_of": [ + "GenotypeInfo" + ] + }, + "title": "Alleles", + "type": "array" + }, + "locus": { + "$ref": "#/$defs/Locus", + "description": "Locus at which information was extracted.", + "linkml_meta": { + "domain_of": [ + "GenotypeInfo" + ] + } + }, + "wasGeneratedBy": { + "default": null, + "description": "Information about session activity used to determine genotype.", + "items": { + "$ref": "#/$defs/Session" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel", + "GenotypeInfo" + ] + }, + "title": "Wasgeneratedby", + "type": "array" + } + }, + "required": [ + "alleles", + "locus" + ], + "title": "GenotypeInfo", + "type": "object" + }, + "IdentifierType": { + "description": "An enumeration of identifiers", + "enum": [ + "dandi:doi", + "dandi:orcid", + "dandi:ror", + "dandi:dandi", + "dandi:rrid" + ], + "title": "IdentifierType", + "type": "string" + }, + "LicenseType": { + "enum": [ + "spdx:CC-BY-4.0", + "spdx:CC0-1.0" + ], + "title": "LicenseType", + "type": "string" + }, + "Locus": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Locus", + "default": "Locus", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "description": "Identifier for genotyping locus.", + "linkml_meta": { + "any_of": [ + { + "range": "string" + }, + { + "multivalued": true, + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "locusType": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Locus" + ] + }, + "title": "Locustype", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "Locus", + "type": "object" + }, + "MeasurementTechniqueType": { + "additionalProperties": false, + "description": "Identifier for measurement technique used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "MeasurementTechniqueType", + "default": "MeasurementTechniqueType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "MeasurementTechniqueType", + "type": "object" + }, + "Organization": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Organization", + "default": "Organization", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "includeInCitation": { + "default": false, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "False" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "contactPoint": { + "default": null, + "description": "Contact for the organization", + "items": { + "$ref": "#/$defs/ContactPoint" + }, + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + }, + "title": "Organization contact information", + "type": "array" + } + }, + "title": "Organization", + "type": "object" + }, + "Participant": { + "additionalProperties": false, + "description": "Description about the Participant or Subject studied. The Participant or Subject can be any individual or synthesized Agent. The properties of the Participant or Subject refers to information at the timepoint when the Participant or Subject engaged in the production of data being described.", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Participant", + "default": "Participant", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "age": { + "$ref": "#/$defs/PropertyValue", + "default": null, + "description": "A representation of age using ISO 8601 duration. This should include a valueReference if anything other than date of birth is used.", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + } + }, + "altName": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Altname", + "type": "array" + }, + "cellLine": { + "default": null, + "description": "Cell line associated with the participant or subject.", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Cellline", + "type": "string" + }, + "disorder": { + "default": null, + "description": "Any current diagnosed disease or disorder associated with the participant or subject.", + "items": { + "$ref": "#/$defs/Disorder" + }, + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Disorder", + "type": "array" + }, + "genotype": { + "anyOf": [ + { + "$ref": "#/$defs/GenotypeInfo" + }, + { + "type": "string" + } + ], + "default": null, + "description": "Genotype descriptor of participant or subject if available", + "linkml_meta": { + "any_of": [ + { + "multivalued": true, + "range": "GenotypeInfo" + }, + { + "range": "string" + } + ], + "domain_of": [ + "Participant" + ] + }, + "title": "Genotype" + }, + "identifier": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "relatedParticipant": { + "default": null, + "description": "Information about related participants or subjects in a study or across studies.", + "items": { + "$ref": "#/$defs/RelatedParticipant" + }, + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Relatedparticipant", + "type": "array" + }, + "sameAs": { + "default": null, + "description": "An identifier to link participants or subjects across datasets.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ] + }, + "title": "Sameas", + "type": "array" + }, + "sex": { + "$ref": "#/$defs/SexType", + "default": null, + "description": "Identifier for sex of the participant or subject if available. (e.g. from OBI)", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + } + }, + "species": { + "$ref": "#/$defs/SpeciesType", + "default": null, + "description": "An identifier indicating the taxonomic classification of the participant or subject.", + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "Participant" + ] + } + }, + "strain": { + "$ref": "#/$defs/StrainType", + "default": null, + "description": "Identifier for the strain of the participant or subject.", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + } + }, + "vendor": { + "$ref": "#/$defs/Organization", + "default": null, + "linkml_meta": { + "domain_of": [ + "Participant" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ] + } + } + }, + "required": [ + "identifier" + ], + "title": "Participant", + "type": "object" + }, + "ParticipantRelationType": { + "description": "An enumeration of participant relations", + "enum": [ + "dandi:isChildOf", + "dandi:isParentOf", + "dandi:isSiblingOf", + "dandi:isMonozygoticTwinOf", + "dandi:isDizygoticTwinOf" + ], + "title": "ParticipantRelationType", + "type": "string" + }, + "Person": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Person", + "default": "Person", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "An ORCID (orcid.org) identifier for an individual.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "An ORCID identifier", + "type": "string" + }, + "includeInCitation": { + "default": true, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "True" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "description": "Use the format: familyname, given names ...", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Use Last, First. Example: Lovelace, Augusta Ada", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "affiliation": { + "default": null, + "description": "An organization that this person is affiliated with.", + "items": { + "$ref": "#/$defs/Affiliation" + }, + "linkml_meta": { + "domain_of": [ + "Person" + ] + }, + "title": "Affiliation", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Person", + "type": "object" + }, + "Project": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Project", + "default": "Project", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "A brief description of the project.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the project that generated this Dandiset or asset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of project", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Project", + "type": "object" + }, + "PropertyValue": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "PropertyValue", + "default": "PropertyValue", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "maxValue": { + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Maxvalue", + "type": "number" + }, + "minValue": { + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Minvalue", + "type": "number" + }, + "propertyID": { + "anyOf": [ + { + "$ref": "#/$defs/IdentifierType" + }, + { + "type": "string" + } + ], + "default": null, + "description": "A commonly used identifier for the characteristic represented by the property. For example, a known prefix like DOI or a full URL.", + "linkml_meta": { + "any_of": [ + { + "range": "IdentifierType" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + } + ], + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Propertyid" + }, + "unitText": { + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Unittext", + "type": "string" + }, + "value": { + "default": null, + "description": "The value associated with this property.", + "linkml_meta": { + "any_of": [ + { + "range": "Any" + }, + { + "multivalued": true, + "range": "Any" + } + ], + "domain_of": [ + "PropertyValue" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Value" + }, + "valueReference": { + "$ref": "#/$defs/PropertyValue", + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + } + } + }, + "title": "PropertyValue", + "type": "object" + }, + "PublishActivity": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "PublishActivity", + "default": "PublishActivity", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the activity.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the activity.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "PublishActivity", + "type": "object" + }, + "RelatedParticipant": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "RelatedParticipant", + "default": "RelatedParticipant", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of the participant or subject", + "type": "string" + }, + "relation": { + "$ref": "#/$defs/ParticipantRelationType", + "description": "Indicates how the current participant or subject is related to the other participant or subject. This relation should satisfy: Participant/Subject relatedParticipant/Subject.", + "linkml_meta": { + "domain_of": [ + "RelatedParticipant", + "Resource" + ] + }, + "title": "Participant or subject relation" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "URL of the related participant or subject", + "type": "string" + } + }, + "required": [ + "relation" + ], + "title": "RelatedParticipant", + "type": "object" + }, + "RelationType": { + "description": "An enumeration of resource relations", + "enum": [ + "dcite:IsCitedBy", + "dcite:Cites", + "dcite:IsSupplementTo", + "dcite:IsSupplementedBy", + "dcite:IsContinuedBy", + "dcite:Continues", + "dcite:Describes", + "dcite:IsDescribedBy", + "dcite:HasMetadata", + "dcite:IsMetadataFor", + "dcite:HasVersion", + "dcite:IsVersionOf", + "dcite:IsNewVersionOf", + "dcite:IsPreviousVersionOf", + "dcite:IsPartOf", + "dcite:HasPart", + "dcite:IsReferencedBy", + "dcite:References", + "dcite:IsDocumentedBy", + "dcite:Documents", + "dcite:IsCompiledBy", + "dcite:Compiles", + "dcite:IsVariantFormOf", + "dcite:IsOriginalFormOf", + "dcite:IsIdenticalTo", + "dcite:IsReviewedBy", + "dcite:Reviews", + "dcite:IsDerivedFrom", + "dcite:IsSourceOf", + "dcite:IsRequiredBy", + "dcite:Requires", + "dcite:Obsoletes", + "dcite:IsObsoletedBy", + "dcite:IsPublishedIn" + ], + "title": "RelationType", + "type": "string" + }, + "Resource": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Resource", + "default": "Resource", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A title of the resource", + "type": "string" + }, + "relation": { + "$ref": "#/$defs/RelationType", + "description": "Indicates how the resource is related to the dataset. This relation should satisfy: dandiset resource.", + "linkml_meta": { + "domain_of": [ + "RelatedParticipant", + "Resource" + ] + }, + "title": "Resource relation" + }, + "repository": { + "default": null, + "description": "Name of the repository in which the resource is housed.", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ] + }, + "title": "Name of the repository", + "type": "string" + }, + "resourceType": { + "$ref": "#/$defs/ResourceType", + "default": null, + "description": "The type of resource.", + "linkml_meta": { + "domain_of": [ + "Resource" + ] + }, + "title": "Resource type" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "URL of the resource", + "type": "string" + } + }, + "required": [ + "relation" + ], + "title": "Resource", + "type": "object" + }, + "ResourceType": { + "description": "An enumeration of resource types", + "enum": [ + "dcite:Audiovisual", + "dcite:Book", + "dcite:BookChapter", + "dcite:Collection", + "dcite:ComputationalNotebook", + "dcite:ConferencePaper", + "dcite:ConferenceProceeding", + "dcite:DataPaper", + "dcite:Dataset", + "dcite:Dissertation", + "dcite:Event", + "dcite:Image", + "dcite:Instrument", + "dcite:InteractiveResource", + "dcite:Journal", + "dcite:JournalArticle", + "dcite:Model", + "dcite:OutputManagementPlan", + "dcite:PeerReview", + "dcite:PhysicalObject", + "dcite:Preprint", + "dcite:Report", + "dcite:Service", + "dcite:Software", + "dcite:Sound", + "dcite:Standard", + "dcite:StudyRegistration", + "dcite:Text", + "dcite:Workflow", + "dcite:Other" + ], + "title": "ResourceType", + "type": "string" + }, + "RoleType": { + "description": "An enumeration of roles", + "enum": [ + "dcite:Author", + "dcite:Conceptualization", + "dcite:ContactPerson", + "dcite:DataCollector", + "dcite:DataCurator", + "dcite:DataManager", + "dcite:FormalAnalysis", + "dcite:FundingAcquisition", + "dcite:Investigation", + "dcite:Maintainer", + "dcite:Methodology", + "dcite:Producer", + "dcite:ProjectLeader", + "dcite:ProjectManager", + "dcite:ProjectMember", + "dcite:ProjectAdministration", + "dcite:Researcher", + "dcite:Resources", + "dcite:Software", + "dcite:Supervision", + "dcite:Validation", + "dcite:Visualization", + "dcite:Funder", + "dcite:Sponsor", + "dcite:StudyParticipant", + "dcite:Affiliation", + "dcite:EthicsApproval", + "dcite:Other" + ], + "title": "RoleType", + "type": "string" + }, + "SampleType": { + "additionalProperties": false, + "description": "OBI based identifier for the sample type used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SampleType", + "default": "SampleType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SampleType", + "type": "object" + }, + "Session": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Session", + "default": "Session", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "A brief description of the session.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the logical session associated with the asset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of session", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Session", + "type": "object" + }, + "SexType": { + "additionalProperties": false, + "description": "Identifier for the sex of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SexType", + "default": "SexType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SexType", + "type": "object" + }, + "Software": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Software", + "default": "Software", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "RRID of the software from scicrunch.org.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Research resource identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "description": "Web page for the software.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "version": { + "linkml_meta": { + "domain_of": [ + "Dandiset", + "Software" + ] + }, + "title": "Version", + "type": "string" + } + }, + "required": [ + "name", + "version" + ], + "title": "Software", + "type": "object" + }, + "SpeciesType": { + "additionalProperties": false, + "description": "Identifier for species of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SpeciesType", + "default": "SpeciesType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SpeciesType", + "type": "object" + }, + "StrainType": { + "additionalProperties": false, + "description": "Identifier for the strain of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "StrainType", + "default": "StrainType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "StrainType", + "type": "object" + } + }, + "additionalProperties": false, + "description": "Metadata used to describe an asset on the server.", + "properties": { + "id": { + "description": "Uniform resource identifier.", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Asset", + "default": "Asset", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "about": { + "default": null, + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "Disorder" + }, + { + "range": "Anatomy" + }, + { + "range": "GenericType" + } + ], + "domain_of": [ + "CommonModel" + ] + }, + "title": "Subject matter of the dataset", + "type": "array" + }, + "access": { + "default": null, + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "readonly": "Read-only for clients; managed by server" + }, + "maxItems": 1, + "title": "Access information", + "type": "array" + }, + "acknowledgement": { + "default": null, + "description": "Any acknowledgments not covered by contributors or external resources.", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Acknowledgement", + "type": "string" + }, + "contributor": { + "default": null, + "description": "Contributors to this item: persons or organizations.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + } + ], + "domain_of": [ + "CommonModel" + ] + }, + "title": "Contributors", + "type": "array" + }, + "description": { + "default": null, + "description": "A description of the item.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "ethicsApproval": { + "default": null, + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Ethics approvals", + "type": "array" + }, + "keywords": { + "default": null, + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Keywords", + "type": "array" + }, + "license": { + "default": null, + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "License", + "type": "array" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "protocol": { + "default": null, + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Protocol", + "type": "array" + }, + "relatedResource": { + "default": null, + "items": { + "$ref": "#/$defs/Resource" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ] + }, + "title": "Relatedresource", + "type": "array" + }, + "repository": { + "default": null, + "description": "location of the item", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Repository", + "type": "string" + }, + "schemaVersion": { + "default": "0.8.0", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemaversion", + "type": "string" + }, + "studyTarget": { + "default": null, + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Studytarget", + "type": "array" + }, + "url": { + "default": null, + "description": "permalink to the item", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Url", + "type": "string" + }, + "wasGeneratedBy": { + "default": null, + "description": "Describe the session, project or activity that generated this asset.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "Session" + }, + { + "range": "Project" + }, + { + "range": "Activity" + } + ], + "domain_of": [ + "CommonModel", + "GenotypeInfo" + ] + }, + "title": "Name of the session, project or activity.", + "type": "array" + }, + "approach": { + "default": null, + "items": { + "$ref": "#/$defs/ApproachType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Approach", + "type": "array" + }, + "blobDateModified": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "BareAsset" + ] + }, + "title": "Asset file modification date and time.", + "type": "string" + }, + "contentSize": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "linkml_meta": { + "any_of": [ + { + "pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", + "range": "string" + }, + { + "minimum_value": 0, + "range": "integer" + } + ], + "domain_of": [ + "BareAsset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Contentsize" + }, + "dataType": { + "default": null, + "linkml_meta": { + "domain_of": [ + "BareAsset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Datatype", + "type": "string" + }, + "dateModified": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "BareAsset", + "Dandiset" + ] + }, + "title": "Asset (file or metadata) modification date and time", + "type": "string" + }, + "digest": { + "linkml_meta": { + "domain_of": [ + "BareAsset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >.", + "pydantic2linkml: Warning: The translation is incomplete. `dict` types are yet to be supported." + ] + }, + "title": "A map of dandi digests to their values", + "type": "string" + }, + "encodingFormat": { + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "range": "string" + } + ], + "domain_of": [ + "BareAsset" + ] + }, + "title": "File encoding format", + "type": "string" + }, + "measurementTechnique": { + "default": null, + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Measurementtechnique", + "type": "array" + }, + "path": { + "linkml_meta": { + "domain_of": [ + "BareAsset" + ] + }, + "title": "Path", + "type": "string" + }, + "sameAs": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Sameas", + "type": "array" + }, + "variableMeasured": { + "default": null, + "items": { + "$ref": "#/$defs/PropertyValue" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Variablemeasured", + "type": "array" + }, + "wasAttributedTo": { + "default": null, + "description": "Associated participant(s) or subject(s).", + "items": { + "$ref": "#/$defs/Participant" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasattributedto", + "type": "array" + }, + "wasDerivedFrom": { + "default": null, + "items": { + "$ref": "#/$defs/BioSample" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasderivedfrom", + "type": "array" + }, + "contentUrl": { + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "Asset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Contenturl", + "type": "array" + }, + "datePublished": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Datepublished", + "type": "string" + }, + "identifier": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Identifier", + "type": "string" + }, + "publishedBy": { + "anyOf": [ + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "string" + } + ], + "default": null, + "description": "The URL should contain the provenance of the publishing process.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "range": "PublishActivity" + } + ], + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Publishedby" + } + }, + "required": [ + "id", + "contentSize", + "digest", + "encodingFormat", + "path", + "contentUrl", + "identifier" + ], + "title": "Asset", + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema" +} diff --git a/dandischema/models_pydantic/context.json b/dandischema/models_pydantic/context.json new file mode 100644 index 00000000..1e9ded82 --- /dev/null +++ b/dandischema/models_pydantic/context.json @@ -0,0 +1,361 @@ +{ + "@context": { + "@version": 1.1, + "dandi": "http://schema.dandiarchive.org/", + "dcite": "http://schema.dandiarchive.org/datacite/", + "dandiasset": "http://dandiarchive.org/asset/", + "DANDI": "http://dandiarchive.org/dandiset/", + "dct": "http://purl.org/dc/terms/", + "owl": "http://www.w3.org/2002/07/owl#", + "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + "rdfa": "http://www.w3.org/ns/rdfa#", + "rdfs": "http://www.w3.org/2000/01/rdf-schema#", + "schema": "http://schema.org/", + "xsd": "http://www.w3.org/2001/XMLSchema#", + "skos": "http://www.w3.org/2004/02/skos/core#", + "prov": "http://www.w3.org/ns/prov#", + "pav": "http://purl.org/pav/", + "nidm": "http://purl.org/nidash/nidm#", + "uuid": "http://uuid.repronim.org/", + "rs": "http://schema.repronim.org/", + "RRID": "https://scicrunch.org/resolver/RRID:", + "ORCID": "https://orcid.org/", + "ROR": "https://ror.org/", + "PATO": "http://purl.obolibrary.org/obo/PATO_", + "spdx": "http://spdx.org/licenses/", + "Asset": "dandi:Asset", + "Dandiset": "dandi:Dandiset", + "about": { + "@id": "dandi:about", + "@container": "@set" + }, + "access": { + "@id": "dandi:access", + "@container": "@set" + }, + "acknowledgement": { + "@id": "dandi:acknowledgement" + }, + "affiliation": { + "@id": "dandi:affiliation", + "@container": "@set" + }, + "age": { + "@id": "dandi:age" + }, + "alleleSymbol": { + "@id": "dandi:alleleSymbol" + }, + "alleleType": { + "@id": "dandi:alleleType" + }, + "alleles": { + "@id": "dandi:alleles", + "@container": "@set" + }, + "altName": { + "@id": "dandi:altName", + "@container": "@set" + }, + "anatomy": { + "@id": "dandi:anatomy", + "@container": "@set" + }, + "approach": { + "@id": "dandi:approach", + "@container": "@set" + }, + "assayType": { + "@id": "dandi:assayType", + "@container": "@set" + }, + "assetsSummary": { + "@id": "dandi:assetsSummary" + }, + "awardNumber": { + "@id": "dandi:awardNumber" + }, + "blobDateModified": { + "@id": "dandi:blobDateModified" + }, + "cellLine": { + "@id": "dandi:cellLine" + }, + "citation": { + "@id": "dandi:citation" + }, + "contactPoint": { + "@id": "dandi:contactPoint" + }, + "contentSize": { + "@id": "dandi:contentSize" + }, + "contentUrl": { + "@id": "dandi:contentUrl", + "@container": "@set" + }, + "contributor": { + "@id": "dandi:contributor", + "@container": "@list" + }, + "dandi:blake2b-256": { + "@id": "dandi:blake2b-256", + "@nest": "digest" + }, + "dandi:blake3": { + "@id": "dandi:blake3", + "@nest": "digest" + }, + "dandi:dandi-etag": { + "@id": "dandi:dandi-etag", + "@nest": "digest" + }, + "dandi:dandi-zarr-checksum": { + "@id": "dandi:dandi-zarr-checksum", + "@nest": "digest" + }, + "dandi:md5": { + "@id": "dandi:md5", + "@nest": "digest" + }, + "dandi:sha1": { + "@id": "dandi:sha1", + "@nest": "digest" + }, + "dandi:sha2-256": { + "@id": "dandi:sha2-256", + "@nest": "digest" + }, + "dandi:sha3-256": { + "@id": "dandi:sha3-256", + "@nest": "digest" + }, + "dataStandard": { + "@id": "dandi:dataStandard", + "@container": "@set" + }, + "dataType": { + "@id": "dandi:dataType" + }, + "dateCreated": { + "@id": "dandi:dateCreated" + }, + "dateModified": { + "@id": "dandi:dateModified" + }, + "datePublished": { + "@id": "dandi:datePublished" + }, + "description": { + "@id": "dandi:description" + }, + "digest": "@nest", + "disorder": { + "@id": "dandi:disorder", + "@container": "@set" + }, + "doi": { + "@id": "dandi:doi" + }, + "dxdate": { + "@id": "dandi:dxdate", + "@container": "@set" + }, + "email": { + "@id": "dandi:email" + }, + "embargoedUntil": { + "@id": "dandi:embargoedUntil" + }, + "encodingFormat": { + "@id": "dandi:encodingFormat" + }, + "endDate": { + "@id": "dandi:endDate" + }, + "ethicsApproval": { + "@id": "dandi:ethicsApproval", + "@container": "@set" + }, + "genotype": { + "@id": "dandi:genotype" + }, + "hasMember": { + "@id": "dandi:hasMember", + "@container": "@set", + "@type": "@id" + }, + "id": "@id", + "identifier": { + "@id": "dandi:identifier" + }, + "includeInCitation": { + "@id": "dandi:includeInCitation" + }, + "keywords": { + "@id": "dandi:keywords", + "@container": "@set" + }, + "license": { + "@id": "dandi:license", + "@container": "@set", + "@type": "@id" + }, + "locus": { + "@id": "dandi:locus" + }, + "locusType": { + "@id": "dandi:locusType" + }, + "manifestLocation": { + "@id": "dandi:manifestLocation", + "@container": "@set" + }, + "maxValue": { + "@id": "dandi:maxValue" + }, + "measurementTechnique": { + "@id": "dandi:measurementTechnique", + "@container": "@set" + }, + "minValue": { + "@id": "dandi:minValue" + }, + "name": { + "@id": "dandi:name" + }, + "numberOfBytes": { + "@id": "dandi:numberOfBytes" + }, + "numberOfCells": { + "@id": "dandi:numberOfCells" + }, + "numberOfFiles": { + "@id": "dandi:numberOfFiles" + }, + "numberOfSamples": { + "@id": "dandi:numberOfSamples" + }, + "numberOfSubjects": { + "@id": "dandi:numberOfSubjects" + }, + "path": { + "@id": "dandi:path" + }, + "propertyID": { + "@id": "dandi:propertyID" + }, + "protocol": { + "@id": "dandi:protocol", + "@container": "@set" + }, + "publishedBy": { + "@id": "dandi:publishedBy" + }, + "relatedParticipant": { + "@id": "dandi:relatedParticipant", + "@container": "@set" + }, + "relatedResource": { + "@id": "dandi:relatedResource", + "@container": "@set" + }, + "relation": { + "@id": "dandi:relation", + "@type": "@id" + }, + "releaseNotes": { + "@id": "dandi:releaseNotes" + }, + "repository": { + "@id": "dandi:repository" + }, + "resourceType": { + "@id": "dandi:resourceType", + "@type": "@id" + }, + "roleName": { + "@id": "dandi:roleName", + "@container": "@set", + "@type": "@id" + }, + "root": { + "@id": "dandi:root" + }, + "sameAs": { + "@id": "dandi:sameAs", + "@container": "@set" + }, + "sampleType": { + "@id": "dandi:sampleType" + }, + "schemaKey": "@type", + "schemaVersion": { + "@id": "dandi:schemaVersion" + }, + "sex": { + "@id": "dandi:sex" + }, + "species": { + "@id": "dandi:species", + "@container": "@set" + }, + "startDate": { + "@id": "dandi:startDate" + }, + "status": { + "@id": "dandi:status", + "@type": "@id" + }, + "strain": { + "@id": "dandi:strain" + }, + "studyTarget": { + "@id": "dandi:studyTarget", + "@container": "@set" + }, + "unitText": { + "@id": "dandi:unitText" + }, + "url": { + "@id": "dandi:url", + "@type": "@id" + }, + "used": { + "@id": "dandi:used", + "@container": "@set" + }, + "value": { + "@id": "dandi:value" + }, + "valueReference": { + "@id": "dandi:valueReference" + }, + "variableMeasured": { + "@id": "dandi:variableMeasured", + "@container": "@set" + }, + "vendor": { + "@id": "dandi:vendor" + }, + "version": { + "@id": "dandi:version" + }, + "wasAssociatedWith": { + "@id": "dandi:wasAssociatedWith", + "@container": "@set" + }, + "wasAttributedTo": { + "@id": "dandi:wasAttributedTo", + "@container": "@set" + }, + "wasDerivedFrom": { + "@id": "dandi:wasDerivedFrom", + "@container": "@set" + }, + "wasGeneratedBy": { + "@id": "dandi:wasGeneratedBy", + "@container": "@set" + } + } +} diff --git a/dandischema/models_pydantic/dandiset.json b/dandischema/models_pydantic/dandiset.json new file mode 100644 index 00000000..b17fc16e --- /dev/null +++ b/dandischema/models_pydantic/dandiset.json @@ -0,0 +1,2960 @@ +{ + "$defs": { + "AccessRequirements": { + "additionalProperties": false, + "description": "Information about access options for the dataset", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AccessRequirements", + "default": "AccessRequirements", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Who or where to look for information about access.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "description": { + "default": null, + "description": "Information about access requirements when embargoed or restricted", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "embargoedUntil": { + "default": null, + "description": "Date on which embargo ends.", + "format": "date", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Embargo end date", + "type": "string" + }, + "status": { + "$ref": "#/$defs/AccessType", + "description": "The access status of the item.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ] + }, + "title": "Access status" + } + }, + "required": [ + "status" + ], + "title": "AccessRequirements", + "type": "object" + }, + "AccessType": { + "description": "An enumeration of access status options", + "enum": [ + "dandi:OpenAccess", + "dandi:EmbargoedAccess" + ], + "title": "AccessType", + "type": "string" + }, + "Affiliation": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Affiliation", + "default": "Affiliation", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "name": { + "description": "Name of organization", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Affiliation", + "type": "object" + }, + "Agent": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Agent", + "default": "Agent", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Identifier for an agent.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Agent", + "type": "object" + }, + "Anatomy": { + "additionalProperties": false, + "description": "UBERON or other identifier for anatomical part studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Anatomy", + "default": "Anatomy", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "Anatomy", + "type": "object" + }, + "ApproachType": { + "additionalProperties": false, + "description": "Identifier for approach used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ApproachType", + "default": "ApproachType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "ApproachType", + "type": "object" + }, + "AssetsSummary": { + "additionalProperties": false, + "description": "Summary over assets contained in a dandiset (published or not)", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AssetsSummary", + "default": "AssetsSummary", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "approach": { + "default": null, + "items": { + "$ref": "#/$defs/ApproachType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Approach", + "type": "array" + }, + "dataStandard": { + "default": null, + "items": { + "$ref": "#/$defs/StandardsType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Datastandard", + "type": "array" + }, + "measurementTechnique": { + "default": null, + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Measurementtechnique", + "type": "array" + }, + "numberOfBytes": { + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofbytes", + "type": "integer" + }, + "numberOfCells": { + "default": null, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofcells", + "type": "integer" + }, + "numberOfFiles": { + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberoffiles", + "type": "integer" + }, + "numberOfSamples": { + "default": null, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofsamples", + "type": "integer" + }, + "numberOfSubjects": { + "default": null, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofsubjects", + "type": "integer" + }, + "species": { + "default": null, + "items": { + "$ref": "#/$defs/SpeciesType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "Participant" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Species", + "type": "array" + }, + "variableMeasured": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Variablemeasured", + "type": "array" + } + }, + "required": [ + "numberOfBytes", + "numberOfFiles" + ], + "title": "AssetsSummary", + "type": "object" + }, + "ContactPoint": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ContactPoint", + "default": "ContactPoint", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "email": { + "default": null, + "description": "Email address of contact.", + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "url": { + "default": null, + "description": "A Web page to find information on how to contact.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "title": "ContactPoint", + "type": "object" + }, + "Disorder": { + "additionalProperties": false, + "description": "Biolink, SNOMED, or other identifier for disorder studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Disorder", + "default": "Disorder", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "dxdate": { + "default": null, + "description": "Dates of diagnosis", + "items": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "date" + }, + { + "range": "datetime" + } + ], + "domain_of": [ + "Disorder" + ] + }, + "title": "Dates of diagnosis", + "type": "array" + } + }, + "title": "Disorder", + "type": "object" + }, + "Equipment": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Equipment", + "default": "Equipment", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the equipment.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "A name for the equipment.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Equipment", + "type": "object" + }, + "EthicsApproval": { + "additionalProperties": false, + "description": "Information about ethics committee approval for project", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "EthicsApproval", + "default": "EthicsApproval", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Information about the ethics approval committee.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "identifier": { + "description": "Approved Protocol identifier, often a number or alphanumeric string.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Approved protocol identifier", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "EthicsApproval", + "type": "object" + }, + "GenericType": { + "additionalProperties": false, + "description": "An object to capture any type for about", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "GenericType", + "default": "GenericType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "GenericType", + "type": "object" + }, + "LicenseType": { + "enum": [ + "spdx:CC-BY-4.0", + "spdx:CC0-1.0" + ], + "title": "LicenseType", + "type": "string" + }, + "MeasurementTechniqueType": { + "additionalProperties": false, + "description": "Identifier for measurement technique used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "MeasurementTechniqueType", + "default": "MeasurementTechniqueType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "MeasurementTechniqueType", + "type": "object" + }, + "Organization": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Organization", + "default": "Organization", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "includeInCitation": { + "default": false, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "False" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "contactPoint": { + "default": null, + "description": "Contact for the organization", + "items": { + "$ref": "#/$defs/ContactPoint" + }, + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + }, + "title": "Organization contact information", + "type": "array" + } + }, + "title": "Organization", + "type": "object" + }, + "Person": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Person", + "default": "Person", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "An ORCID (orcid.org) identifier for an individual.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "An ORCID identifier", + "type": "string" + }, + "includeInCitation": { + "default": true, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "True" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "description": "Use the format: familyname, given names ...", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Use Last, First. Example: Lovelace, Augusta Ada", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "affiliation": { + "default": null, + "description": "An organization that this person is affiliated with.", + "items": { + "$ref": "#/$defs/Affiliation" + }, + "linkml_meta": { + "domain_of": [ + "Person" + ] + }, + "title": "Affiliation", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Person", + "type": "object" + }, + "Project": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Project", + "default": "Project", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "A brief description of the project.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the project that generated this Dandiset or asset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of project", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Project", + "type": "object" + }, + "PublishActivity": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "PublishActivity", + "default": "PublishActivity", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the activity.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the activity.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "PublishActivity", + "type": "object" + }, + "RelationType": { + "description": "An enumeration of resource relations", + "enum": [ + "dcite:IsCitedBy", + "dcite:Cites", + "dcite:IsSupplementTo", + "dcite:IsSupplementedBy", + "dcite:IsContinuedBy", + "dcite:Continues", + "dcite:Describes", + "dcite:IsDescribedBy", + "dcite:HasMetadata", + "dcite:IsMetadataFor", + "dcite:HasVersion", + "dcite:IsVersionOf", + "dcite:IsNewVersionOf", + "dcite:IsPreviousVersionOf", + "dcite:IsPartOf", + "dcite:HasPart", + "dcite:IsReferencedBy", + "dcite:References", + "dcite:IsDocumentedBy", + "dcite:Documents", + "dcite:IsCompiledBy", + "dcite:Compiles", + "dcite:IsVariantFormOf", + "dcite:IsOriginalFormOf", + "dcite:IsIdenticalTo", + "dcite:IsReviewedBy", + "dcite:Reviews", + "dcite:IsDerivedFrom", + "dcite:IsSourceOf", + "dcite:IsRequiredBy", + "dcite:Requires", + "dcite:Obsoletes", + "dcite:IsObsoletedBy", + "dcite:IsPublishedIn" + ], + "title": "RelationType", + "type": "string" + }, + "Resource": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Resource", + "default": "Resource", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A title of the resource", + "type": "string" + }, + "relation": { + "$ref": "#/$defs/RelationType", + "description": "Indicates how the resource is related to the dataset. This relation should satisfy: dandiset resource.", + "linkml_meta": { + "domain_of": [ + "RelatedParticipant", + "Resource" + ] + }, + "title": "Resource relation" + }, + "repository": { + "default": null, + "description": "Name of the repository in which the resource is housed.", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ] + }, + "title": "Name of the repository", + "type": "string" + }, + "resourceType": { + "$ref": "#/$defs/ResourceType", + "default": null, + "description": "The type of resource.", + "linkml_meta": { + "domain_of": [ + "Resource" + ] + }, + "title": "Resource type" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "URL of the resource", + "type": "string" + } + }, + "required": [ + "relation" + ], + "title": "Resource", + "type": "object" + }, + "ResourceType": { + "description": "An enumeration of resource types", + "enum": [ + "dcite:Audiovisual", + "dcite:Book", + "dcite:BookChapter", + "dcite:Collection", + "dcite:ComputationalNotebook", + "dcite:ConferencePaper", + "dcite:ConferenceProceeding", + "dcite:DataPaper", + "dcite:Dataset", + "dcite:Dissertation", + "dcite:Event", + "dcite:Image", + "dcite:Instrument", + "dcite:InteractiveResource", + "dcite:Journal", + "dcite:JournalArticle", + "dcite:Model", + "dcite:OutputManagementPlan", + "dcite:PeerReview", + "dcite:PhysicalObject", + "dcite:Preprint", + "dcite:Report", + "dcite:Service", + "dcite:Software", + "dcite:Sound", + "dcite:Standard", + "dcite:StudyRegistration", + "dcite:Text", + "dcite:Workflow", + "dcite:Other" + ], + "title": "ResourceType", + "type": "string" + }, + "RoleType": { + "description": "An enumeration of roles", + "enum": [ + "dcite:Author", + "dcite:Conceptualization", + "dcite:ContactPerson", + "dcite:DataCollector", + "dcite:DataCurator", + "dcite:DataManager", + "dcite:FormalAnalysis", + "dcite:FundingAcquisition", + "dcite:Investigation", + "dcite:Maintainer", + "dcite:Methodology", + "dcite:Producer", + "dcite:ProjectLeader", + "dcite:ProjectManager", + "dcite:ProjectMember", + "dcite:ProjectAdministration", + "dcite:Researcher", + "dcite:Resources", + "dcite:Software", + "dcite:Supervision", + "dcite:Validation", + "dcite:Visualization", + "dcite:Funder", + "dcite:Sponsor", + "dcite:StudyParticipant", + "dcite:Affiliation", + "dcite:EthicsApproval", + "dcite:Other" + ], + "title": "RoleType", + "type": "string" + }, + "Software": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Software", + "default": "Software", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "RRID of the software from scicrunch.org.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Research resource identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "description": "Web page for the software.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "version": { + "linkml_meta": { + "domain_of": [ + "Dandiset", + "Software" + ] + }, + "title": "Version", + "type": "string" + } + }, + "required": [ + "name", + "version" + ], + "title": "Software", + "type": "object" + }, + "SpeciesType": { + "additionalProperties": false, + "description": "Identifier for species of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SpeciesType", + "default": "SpeciesType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SpeciesType", + "type": "object" + }, + "StandardsType": { + "additionalProperties": false, + "description": "Identifier for data standard used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "StandardsType", + "default": "StandardsType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "StandardsType", + "type": "object" + } + }, + "additionalProperties": false, + "description": "A body of structured information describing a DANDI dataset.", + "properties": { + "id": { + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Dandiset", + "default": "Dandiset", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "about": { + "default": null, + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "Disorder" + }, + { + "range": "Anatomy" + }, + { + "range": "GenericType" + } + ], + "domain_of": [ + "CommonModel" + ] + }, + "title": "Subject matter of the dataset", + "type": "array" + }, + "access": { + "default": null, + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Access information", + "type": "array" + }, + "acknowledgement": { + "default": null, + "description": "Any acknowledgments not covered by contributors or external resources.", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Acknowledgement", + "type": "string" + }, + "contributor": { + "description": "People or Organizations that have contributed to this Dandiset.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + } + ], + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "minItems": 1, + "title": "Dandiset contributors", + "type": "array" + }, + "description": { + "description": "A description of the Dandiset", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,10000}\\Z" + } + ], + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "ethicsApproval": { + "default": null, + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Ethics approvals", + "type": "array" + }, + "keywords": { + "default": null, + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Keywords", + "type": "array" + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "minItems": 1, + "title": "License", + "type": "array" + }, + "name": { + "description": "A title associated with the Dandiset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Dandiset title", + "type": "string" + }, + "protocol": { + "default": null, + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Protocol", + "type": "array" + }, + "relatedResource": { + "default": null, + "items": { + "$ref": "#/$defs/Resource" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ] + }, + "title": "Relatedresource", + "type": "array" + }, + "repository": { + "default": null, + "description": "location of the item", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Repository", + "type": "string" + }, + "schemaVersion": { + "default": "0.8.0", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemaversion", + "type": "string" + }, + "studyTarget": { + "default": null, + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Studytarget", + "type": "array" + }, + "url": { + "default": null, + "description": "Permalink to the Dandiset.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Url", + "type": "string" + }, + "wasGeneratedBy": { + "default": null, + "description": "Project(s) that generated this Dandiset.", + "items": { + "$ref": "#/$defs/Project" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel", + "GenotypeInfo" + ] + }, + "title": "Associated projects", + "type": "array" + }, + "assetsSummary": { + "$ref": "#/$defs/AssetsSummary", + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + } + }, + "citation": { + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Citation", + "type": "string" + }, + "dateCreated": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Dandiset creation date and time.", + "type": "string" + }, + "dateModified": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "BareAsset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Last modification date and time.", + "type": "string" + }, + "datePublished": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Datepublished", + "type": "string" + }, + "doi": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "DOI", + "type": "string" + }, + "identifier": { + "description": "A Dandiset identifier that can be resolved by identifiers.org.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Dandiset identifier", + "type": "string" + }, + "manifestLocation": { + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "minItems": 1, + "title": "Manifestlocation", + "type": "array" + }, + "publishedBy": { + "anyOf": [ + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "string" + } + ], + "default": null, + "description": "The URL should contain the provenance of the publishing process.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "range": "PublishActivity" + } + ], + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Publishedby" + }, + "releaseNotes": { + "default": null, + "description": "The description of the release", + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Releasenotes", + "type": "string" + }, + "sameAs": { + "default": null, + "description": "Known DANDI URLs of the Dandiset at other DANDI instances.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ] + }, + "title": "Sameas", + "type": "array" + }, + "version": { + "linkml_meta": { + "domain_of": [ + "Dandiset", + "Software" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Version", + "type": "string" + } + }, + "required": [ + "id", + "contributor", + "description", + "license", + "name", + "assetsSummary", + "citation", + "identifier", + "manifestLocation", + "version" + ], + "title": "Dandiset", + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema" +} diff --git a/dandischema/models_pydantic/published-asset.json b/dandischema/models_pydantic/published-asset.json new file mode 100644 index 00000000..425ae11b --- /dev/null +++ b/dandischema/models_pydantic/published-asset.json @@ -0,0 +1,4431 @@ +{ + "$defs": { + "AccessRequirements": { + "additionalProperties": false, + "description": "Information about access options for the dataset", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AccessRequirements", + "default": "AccessRequirements", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Who or where to look for information about access.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "description": { + "default": null, + "description": "Information about access requirements when embargoed or restricted", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "embargoedUntil": { + "default": null, + "description": "Date on which embargo ends.", + "format": "date", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Embargo end date", + "type": "string" + }, + "status": { + "$ref": "#/$defs/AccessType", + "description": "The access status of the item.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ] + }, + "title": "Access status" + } + }, + "required": [ + "status" + ], + "title": "AccessRequirements", + "type": "object" + }, + "AccessType": { + "description": "An enumeration of access status options", + "enum": [ + "dandi:OpenAccess", + "dandi:EmbargoedAccess" + ], + "title": "AccessType", + "type": "string" + }, + "Activity": { + "additionalProperties": false, + "description": "Information about the Project activity", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Activity", + "default": "Activity", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the activity.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the activity.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Activity", + "type": "object" + }, + "Affiliation": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Affiliation", + "default": "Affiliation", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "name": { + "description": "Name of organization", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Affiliation", + "type": "object" + }, + "Agent": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Agent", + "default": "Agent", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Identifier for an agent.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Agent", + "type": "object" + }, + "Allele": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Allele", + "default": "Allele", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "alleleSymbol": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Allele" + ] + }, + "title": "Allelesymbol", + "type": "string" + }, + "alleleType": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Allele" + ] + }, + "title": "Alleletype", + "type": "string" + }, + "identifier": { + "description": "Identifier for genotyping allele.", + "linkml_meta": { + "any_of": [ + { + "range": "string" + }, + { + "multivalued": true, + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "Allele", + "type": "object" + }, + "Anatomy": { + "additionalProperties": false, + "description": "UBERON or other identifier for anatomical part studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Anatomy", + "default": "Anatomy", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "Anatomy", + "type": "object" + }, + "ApproachType": { + "additionalProperties": false, + "description": "Identifier for approach used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ApproachType", + "default": "ApproachType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "ApproachType", + "type": "object" + }, + "AssayType": { + "additionalProperties": false, + "description": "OBI based identifier for the assay(s) used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AssayType", + "default": "AssayType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "AssayType", + "type": "object" + }, + "BioSample": { + "additionalProperties": false, + "description": "Description of the sample that was studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "BioSample", + "default": "BioSample", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "anatomy": { + "default": null, + "description": "Identifier for what organ the sample belongs to. Use the most specific descriptor from sources such as UBERON.", + "items": { + "$ref": "#/$defs/Anatomy" + }, + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + }, + "title": "Anatomy", + "type": "array" + }, + "assayType": { + "default": null, + "description": "Identifier for the assay(s) used (e.g., OBI).", + "items": { + "$ref": "#/$defs/AssayType" + }, + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + }, + "title": "Assaytype", + "type": "array" + }, + "hasMember": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + }, + "title": "Hasmember", + "type": "array" + }, + "identifier": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "sameAs": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ] + }, + "title": "Sameas", + "type": "array" + }, + "sampleType": { + "$ref": "#/$defs/SampleType", + "description": "Identifier for the sample characteristics (e.g., from OBI, Encode).", + "linkml_meta": { + "domain_of": [ + "BioSample" + ] + } + }, + "wasAttributedTo": { + "default": null, + "description": "Participant(s) or Subject(s) associated with this sample.", + "items": { + "$ref": "#/$defs/Participant" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasattributedto", + "type": "array" + }, + "wasDerivedFrom": { + "default": null, + "description": "Describes the hierarchy of sample derivation or aggregation.", + "items": { + "$ref": "#/$defs/BioSample" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasderivedfrom", + "type": "array" + } + }, + "required": [ + "identifier", + "sampleType" + ], + "title": "BioSample", + "type": "object" + }, + "ContactPoint": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ContactPoint", + "default": "ContactPoint", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "email": { + "default": null, + "description": "Email address of contact.", + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "url": { + "default": null, + "description": "A Web page to find information on how to contact.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "title": "ContactPoint", + "type": "object" + }, + "Disorder": { + "additionalProperties": false, + "description": "Biolink, SNOMED, or other identifier for disorder studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Disorder", + "default": "Disorder", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "dxdate": { + "default": null, + "description": "Dates of diagnosis", + "items": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "date" + }, + { + "range": "datetime" + } + ], + "domain_of": [ + "Disorder" + ] + }, + "title": "Dates of diagnosis", + "type": "array" + } + }, + "title": "Disorder", + "type": "object" + }, + "Equipment": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Equipment", + "default": "Equipment", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the equipment.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "A name for the equipment.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Equipment", + "type": "object" + }, + "EthicsApproval": { + "additionalProperties": false, + "description": "Information about ethics committee approval for project", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "EthicsApproval", + "default": "EthicsApproval", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Information about the ethics approval committee.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "identifier": { + "description": "Approved Protocol identifier, often a number or alphanumeric string.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Approved protocol identifier", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "EthicsApproval", + "type": "object" + }, + "GenericType": { + "additionalProperties": false, + "description": "An object to capture any type for about", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "GenericType", + "default": "GenericType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "GenericType", + "type": "object" + }, + "GenotypeInfo": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "GenotypeInfo", + "default": "GenotypeInfo", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "alleles": { + "description": "Information about alleles at the locus.", + "items": { + "$ref": "#/$defs/Allele" + }, + "linkml_meta": { + "domain_of": [ + "GenotypeInfo" + ] + }, + "title": "Alleles", + "type": "array" + }, + "locus": { + "$ref": "#/$defs/Locus", + "description": "Locus at which information was extracted.", + "linkml_meta": { + "domain_of": [ + "GenotypeInfo" + ] + } + }, + "wasGeneratedBy": { + "default": null, + "description": "Information about session activity used to determine genotype.", + "items": { + "$ref": "#/$defs/Session" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel", + "GenotypeInfo" + ] + }, + "title": "Wasgeneratedby", + "type": "array" + } + }, + "required": [ + "alleles", + "locus" + ], + "title": "GenotypeInfo", + "type": "object" + }, + "IdentifierType": { + "description": "An enumeration of identifiers", + "enum": [ + "dandi:doi", + "dandi:orcid", + "dandi:ror", + "dandi:dandi", + "dandi:rrid" + ], + "title": "IdentifierType", + "type": "string" + }, + "LicenseType": { + "enum": [ + "spdx:CC-BY-4.0", + "spdx:CC0-1.0" + ], + "title": "LicenseType", + "type": "string" + }, + "Locus": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Locus", + "default": "Locus", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "description": "Identifier for genotyping locus.", + "linkml_meta": { + "any_of": [ + { + "range": "string" + }, + { + "multivalued": true, + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "locusType": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Locus" + ] + }, + "title": "Locustype", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "Locus", + "type": "object" + }, + "MeasurementTechniqueType": { + "additionalProperties": false, + "description": "Identifier for measurement technique used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "MeasurementTechniqueType", + "default": "MeasurementTechniqueType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "MeasurementTechniqueType", + "type": "object" + }, + "Organization": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Organization", + "default": "Organization", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "includeInCitation": { + "default": false, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "False" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "contactPoint": { + "default": null, + "description": "Contact for the organization", + "items": { + "$ref": "#/$defs/ContactPoint" + }, + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + }, + "title": "Organization contact information", + "type": "array" + } + }, + "title": "Organization", + "type": "object" + }, + "Participant": { + "additionalProperties": false, + "description": "Description about the Participant or Subject studied. The Participant or Subject can be any individual or synthesized Agent. The properties of the Participant or Subject refers to information at the timepoint when the Participant or Subject engaged in the production of data being described.", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Participant", + "default": "Participant", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "age": { + "$ref": "#/$defs/PropertyValue", + "default": null, + "description": "A representation of age using ISO 8601 duration. This should include a valueReference if anything other than date of birth is used.", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + } + }, + "altName": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Altname", + "type": "array" + }, + "cellLine": { + "default": null, + "description": "Cell line associated with the participant or subject.", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Cellline", + "type": "string" + }, + "disorder": { + "default": null, + "description": "Any current diagnosed disease or disorder associated with the participant or subject.", + "items": { + "$ref": "#/$defs/Disorder" + }, + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Disorder", + "type": "array" + }, + "genotype": { + "anyOf": [ + { + "$ref": "#/$defs/GenotypeInfo" + }, + { + "type": "string" + } + ], + "default": null, + "description": "Genotype descriptor of participant or subject if available", + "linkml_meta": { + "any_of": [ + { + "multivalued": true, + "range": "GenotypeInfo" + }, + { + "range": "string" + } + ], + "domain_of": [ + "Participant" + ] + }, + "title": "Genotype" + }, + "identifier": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "relatedParticipant": { + "default": null, + "description": "Information about related participants or subjects in a study or across studies.", + "items": { + "$ref": "#/$defs/RelatedParticipant" + }, + "linkml_meta": { + "domain_of": [ + "Participant" + ] + }, + "title": "Relatedparticipant", + "type": "array" + }, + "sameAs": { + "default": null, + "description": "An identifier to link participants or subjects across datasets.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ] + }, + "title": "Sameas", + "type": "array" + }, + "sex": { + "$ref": "#/$defs/SexType", + "default": null, + "description": "Identifier for sex of the participant or subject if available. (e.g. from OBI)", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + } + }, + "species": { + "$ref": "#/$defs/SpeciesType", + "default": null, + "description": "An identifier indicating the taxonomic classification of the participant or subject.", + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "Participant" + ] + } + }, + "strain": { + "$ref": "#/$defs/StrainType", + "default": null, + "description": "Identifier for the strain of the participant or subject.", + "linkml_meta": { + "domain_of": [ + "Participant" + ] + } + }, + "vendor": { + "$ref": "#/$defs/Organization", + "default": null, + "linkml_meta": { + "domain_of": [ + "Participant" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ] + } + } + }, + "required": [ + "identifier" + ], + "title": "Participant", + "type": "object" + }, + "ParticipantRelationType": { + "description": "An enumeration of participant relations", + "enum": [ + "dandi:isChildOf", + "dandi:isParentOf", + "dandi:isSiblingOf", + "dandi:isMonozygoticTwinOf", + "dandi:isDizygoticTwinOf" + ], + "title": "ParticipantRelationType", + "type": "string" + }, + "Person": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Person", + "default": "Person", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "An ORCID (orcid.org) identifier for an individual.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "An ORCID identifier", + "type": "string" + }, + "includeInCitation": { + "default": true, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "True" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "description": "Use the format: familyname, given names ...", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Use Last, First. Example: Lovelace, Augusta Ada", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "affiliation": { + "default": null, + "description": "An organization that this person is affiliated with.", + "items": { + "$ref": "#/$defs/Affiliation" + }, + "linkml_meta": { + "domain_of": [ + "Person" + ] + }, + "title": "Affiliation", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Person", + "type": "object" + }, + "Project": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Project", + "default": "Project", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "A brief description of the project.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the project that generated this Dandiset or asset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of project", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Project", + "type": "object" + }, + "PropertyValue": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "PropertyValue", + "default": "PropertyValue", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "maxValue": { + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Maxvalue", + "type": "number" + }, + "minValue": { + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Minvalue", + "type": "number" + }, + "propertyID": { + "anyOf": [ + { + "$ref": "#/$defs/IdentifierType" + }, + { + "type": "string" + } + ], + "default": null, + "description": "A commonly used identifier for the characteristic represented by the property. For example, a known prefix like DOI or a full URL.", + "linkml_meta": { + "any_of": [ + { + "range": "IdentifierType" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + } + ], + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Propertyid" + }, + "unitText": { + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + }, + "title": "Unittext", + "type": "string" + }, + "value": { + "default": null, + "description": "The value associated with this property.", + "linkml_meta": { + "any_of": [ + { + "range": "Any" + }, + { + "multivalued": true, + "range": "Any" + } + ], + "domain_of": [ + "PropertyValue" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Value" + }, + "valueReference": { + "$ref": "#/$defs/PropertyValue", + "default": null, + "linkml_meta": { + "domain_of": [ + "PropertyValue" + ] + } + } + }, + "title": "PropertyValue", + "type": "object" + }, + "PublishActivity": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "PublishActivity", + "default": "PublishActivity", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the activity.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the activity.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "PublishActivity", + "type": "object" + }, + "RelatedParticipant": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "RelatedParticipant", + "default": "RelatedParticipant", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of the participant or subject", + "type": "string" + }, + "relation": { + "$ref": "#/$defs/ParticipantRelationType", + "description": "Indicates how the current participant or subject is related to the other participant or subject. This relation should satisfy: Participant/Subject relatedParticipant/Subject.", + "linkml_meta": { + "domain_of": [ + "RelatedParticipant", + "Resource" + ] + }, + "title": "Participant or subject relation" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "URL of the related participant or subject", + "type": "string" + } + }, + "required": [ + "relation" + ], + "title": "RelatedParticipant", + "type": "object" + }, + "RelationType": { + "description": "An enumeration of resource relations", + "enum": [ + "dcite:IsCitedBy", + "dcite:Cites", + "dcite:IsSupplementTo", + "dcite:IsSupplementedBy", + "dcite:IsContinuedBy", + "dcite:Continues", + "dcite:Describes", + "dcite:IsDescribedBy", + "dcite:HasMetadata", + "dcite:IsMetadataFor", + "dcite:HasVersion", + "dcite:IsVersionOf", + "dcite:IsNewVersionOf", + "dcite:IsPreviousVersionOf", + "dcite:IsPartOf", + "dcite:HasPart", + "dcite:IsReferencedBy", + "dcite:References", + "dcite:IsDocumentedBy", + "dcite:Documents", + "dcite:IsCompiledBy", + "dcite:Compiles", + "dcite:IsVariantFormOf", + "dcite:IsOriginalFormOf", + "dcite:IsIdenticalTo", + "dcite:IsReviewedBy", + "dcite:Reviews", + "dcite:IsDerivedFrom", + "dcite:IsSourceOf", + "dcite:IsRequiredBy", + "dcite:Requires", + "dcite:Obsoletes", + "dcite:IsObsoletedBy", + "dcite:IsPublishedIn" + ], + "title": "RelationType", + "type": "string" + }, + "Resource": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Resource", + "default": "Resource", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A title of the resource", + "type": "string" + }, + "relation": { + "$ref": "#/$defs/RelationType", + "description": "Indicates how the resource is related to the dataset. This relation should satisfy: dandiset resource.", + "linkml_meta": { + "domain_of": [ + "RelatedParticipant", + "Resource" + ] + }, + "title": "Resource relation" + }, + "repository": { + "default": null, + "description": "Name of the repository in which the resource is housed.", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ] + }, + "title": "Name of the repository", + "type": "string" + }, + "resourceType": { + "$ref": "#/$defs/ResourceType", + "default": null, + "description": "The type of resource.", + "linkml_meta": { + "domain_of": [ + "Resource" + ] + }, + "title": "Resource type" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "URL of the resource", + "type": "string" + } + }, + "required": [ + "relation" + ], + "title": "Resource", + "type": "object" + }, + "ResourceType": { + "description": "An enumeration of resource types", + "enum": [ + "dcite:Audiovisual", + "dcite:Book", + "dcite:BookChapter", + "dcite:Collection", + "dcite:ComputationalNotebook", + "dcite:ConferencePaper", + "dcite:ConferenceProceeding", + "dcite:DataPaper", + "dcite:Dataset", + "dcite:Dissertation", + "dcite:Event", + "dcite:Image", + "dcite:Instrument", + "dcite:InteractiveResource", + "dcite:Journal", + "dcite:JournalArticle", + "dcite:Model", + "dcite:OutputManagementPlan", + "dcite:PeerReview", + "dcite:PhysicalObject", + "dcite:Preprint", + "dcite:Report", + "dcite:Service", + "dcite:Software", + "dcite:Sound", + "dcite:Standard", + "dcite:StudyRegistration", + "dcite:Text", + "dcite:Workflow", + "dcite:Other" + ], + "title": "ResourceType", + "type": "string" + }, + "RoleType": { + "description": "An enumeration of roles", + "enum": [ + "dcite:Author", + "dcite:Conceptualization", + "dcite:ContactPerson", + "dcite:DataCollector", + "dcite:DataCurator", + "dcite:DataManager", + "dcite:FormalAnalysis", + "dcite:FundingAcquisition", + "dcite:Investigation", + "dcite:Maintainer", + "dcite:Methodology", + "dcite:Producer", + "dcite:ProjectLeader", + "dcite:ProjectManager", + "dcite:ProjectMember", + "dcite:ProjectAdministration", + "dcite:Researcher", + "dcite:Resources", + "dcite:Software", + "dcite:Supervision", + "dcite:Validation", + "dcite:Visualization", + "dcite:Funder", + "dcite:Sponsor", + "dcite:StudyParticipant", + "dcite:Affiliation", + "dcite:EthicsApproval", + "dcite:Other" + ], + "title": "RoleType", + "type": "string" + }, + "SampleType": { + "additionalProperties": false, + "description": "OBI based identifier for the sample type used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SampleType", + "default": "SampleType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SampleType", + "type": "object" + }, + "Session": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Session", + "default": "Session", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "A brief description of the session.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the logical session associated with the asset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of session", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Session", + "type": "object" + }, + "SexType": { + "additionalProperties": false, + "description": "Identifier for the sex of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SexType", + "default": "SexType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SexType", + "type": "object" + }, + "Software": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Software", + "default": "Software", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "RRID of the software from scicrunch.org.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Research resource identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "description": "Web page for the software.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "version": { + "linkml_meta": { + "domain_of": [ + "Dandiset", + "Software" + ] + }, + "title": "Version", + "type": "string" + } + }, + "required": [ + "name", + "version" + ], + "title": "Software", + "type": "object" + }, + "SpeciesType": { + "additionalProperties": false, + "description": "Identifier for species of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SpeciesType", + "default": "SpeciesType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SpeciesType", + "type": "object" + }, + "StrainType": { + "additionalProperties": false, + "description": "Identifier for the strain of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "StrainType", + "default": "StrainType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "StrainType", + "type": "object" + } + }, + "additionalProperties": false, + "description": "Metadata used to describe an asset on the server.", + "properties": { + "id": { + "description": "Uniform resource identifier.", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Asset", + "default": "Asset", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "about": { + "default": null, + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "Disorder" + }, + { + "range": "Anatomy" + }, + { + "range": "GenericType" + } + ], + "domain_of": [ + "CommonModel" + ] + }, + "title": "Subject matter of the dataset", + "type": "array" + }, + "access": { + "default": null, + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "readonly": "Read-only for clients; managed by server" + }, + "maxItems": 1, + "title": "Access information", + "type": "array" + }, + "acknowledgement": { + "default": null, + "description": "Any acknowledgments not covered by contributors or external resources.", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Acknowledgement", + "type": "string" + }, + "contributor": { + "default": null, + "description": "Contributors to this item: persons or organizations.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + } + ], + "domain_of": [ + "CommonModel" + ] + }, + "title": "Contributors", + "type": "array" + }, + "description": { + "default": null, + "description": "A description of the item.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "ethicsApproval": { + "default": null, + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Ethics approvals", + "type": "array" + }, + "keywords": { + "default": null, + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Keywords", + "type": "array" + }, + "license": { + "default": null, + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "License", + "type": "array" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "protocol": { + "default": null, + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Protocol", + "type": "array" + }, + "relatedResource": { + "default": null, + "items": { + "$ref": "#/$defs/Resource" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ] + }, + "title": "Relatedresource", + "type": "array" + }, + "repository": { + "default": null, + "description": "location of the item", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Repository", + "type": "string" + }, + "schemaVersion": { + "default": "0.8.0", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemaversion", + "type": "string" + }, + "studyTarget": { + "default": null, + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Studytarget", + "type": "array" + }, + "url": { + "default": null, + "description": "permalink to the item", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Url", + "type": "string" + }, + "wasGeneratedBy": { + "default": null, + "description": "Describe the session, project or activity that generated this asset.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Activity" + }, + { + "$ref": "#/$defs/Project" + }, + { + "$ref": "#/$defs/PublishActivity" + }, + { + "$ref": "#/$defs/Session" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "Session" + }, + { + "range": "Project" + }, + { + "range": "Activity" + } + ], + "domain_of": [ + "CommonModel", + "GenotypeInfo" + ] + }, + "title": "Name of the session, project or activity.", + "type": "array" + }, + "approach": { + "default": null, + "items": { + "$ref": "#/$defs/ApproachType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Approach", + "type": "array" + }, + "blobDateModified": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "BareAsset" + ] + }, + "title": "Asset file modification date and time.", + "type": "string" + }, + "contentSize": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + } + ], + "linkml_meta": { + "any_of": [ + { + "pattern": "^\\s*(\\d*\\.?\\d+)\\s*(\\w+)?", + "range": "string" + }, + { + "minimum_value": 0, + "range": "integer" + } + ], + "domain_of": [ + "BareAsset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Contentsize" + }, + "dataType": { + "default": null, + "linkml_meta": { + "domain_of": [ + "BareAsset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Datatype", + "type": "string" + }, + "dateModified": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "BareAsset", + "Dandiset" + ] + }, + "title": "Asset (file or metadata) modification date and time", + "type": "string" + }, + "digest": { + "linkml_meta": { + "domain_of": [ + "BareAsset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >.", + "pydantic2linkml: Warning: The translation is incomplete. `dict` types are yet to be supported." + ] + }, + "title": "A map of dandi digests to their values", + "type": "string" + }, + "encodingFormat": { + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "range": "string" + } + ], + "domain_of": [ + "BareAsset" + ] + }, + "title": "File encoding format", + "type": "string" + }, + "measurementTechnique": { + "default": null, + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Measurementtechnique", + "type": "array" + }, + "path": { + "linkml_meta": { + "domain_of": [ + "BareAsset" + ] + }, + "title": "Path", + "type": "string" + }, + "sameAs": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Sameas", + "type": "array" + }, + "variableMeasured": { + "default": null, + "items": { + "$ref": "#/$defs/PropertyValue" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Variablemeasured", + "type": "array" + }, + "wasAttributedTo": { + "default": null, + "description": "Associated participant(s) or subject(s).", + "items": { + "$ref": "#/$defs/Participant" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasattributedto", + "type": "array" + }, + "wasDerivedFrom": { + "default": null, + "items": { + "$ref": "#/$defs/BioSample" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample" + ] + }, + "title": "Wasderivedfrom", + "type": "array" + }, + "contentUrl": { + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "Asset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Contenturl", + "type": "array" + }, + "datePublished": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Datepublished", + "type": "string" + }, + "identifier": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Identifier", + "type": "string" + }, + "publishedBy": { + "anyOf": [ + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "string" + } + ], + "default": null, + "description": "The URL should contain the provenance of the publishing process.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "range": "PublishActivity" + } + ], + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Publishedby" + } + }, + "required": [ + "id", + "contentSize", + "digest", + "encodingFormat", + "path", + "contentUrl", + "identifier" + ], + "title": "Asset", + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema" +} diff --git a/dandischema/models_pydantic/published-dandiset.json b/dandischema/models_pydantic/published-dandiset.json new file mode 100644 index 00000000..b17fc16e --- /dev/null +++ b/dandischema/models_pydantic/published-dandiset.json @@ -0,0 +1,2960 @@ +{ + "$defs": { + "AccessRequirements": { + "additionalProperties": false, + "description": "Information about access options for the dataset", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AccessRequirements", + "default": "AccessRequirements", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Who or where to look for information about access.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "description": { + "default": null, + "description": "Information about access requirements when embargoed or restricted", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "embargoedUntil": { + "default": null, + "description": "Date on which embargo ends.", + "format": "date", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Embargo end date", + "type": "string" + }, + "status": { + "$ref": "#/$defs/AccessType", + "description": "The access status of the item.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements" + ] + }, + "title": "Access status" + } + }, + "required": [ + "status" + ], + "title": "AccessRequirements", + "type": "object" + }, + "AccessType": { + "description": "An enumeration of access status options", + "enum": [ + "dandi:OpenAccess", + "dandi:EmbargoedAccess" + ], + "title": "AccessType", + "type": "string" + }, + "Affiliation": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Affiliation", + "default": "Affiliation", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "name": { + "description": "Name of organization", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Affiliation", + "type": "object" + }, + "Agent": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Agent", + "default": "Agent", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Identifier for an agent.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Agent", + "type": "object" + }, + "Anatomy": { + "additionalProperties": false, + "description": "UBERON or other identifier for anatomical part studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Anatomy", + "default": "Anatomy", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "Anatomy", + "type": "object" + }, + "ApproachType": { + "additionalProperties": false, + "description": "Identifier for approach used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ApproachType", + "default": "ApproachType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "ApproachType", + "type": "object" + }, + "AssetsSummary": { + "additionalProperties": false, + "description": "Summary over assets contained in a dandiset (published or not)", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "AssetsSummary", + "default": "AssetsSummary", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "approach": { + "default": null, + "items": { + "$ref": "#/$defs/ApproachType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Approach", + "type": "array" + }, + "dataStandard": { + "default": null, + "items": { + "$ref": "#/$defs/StandardsType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Datastandard", + "type": "array" + }, + "measurementTechnique": { + "default": null, + "items": { + "$ref": "#/$defs/MeasurementTechniqueType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Measurementtechnique", + "type": "array" + }, + "numberOfBytes": { + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofbytes", + "type": "integer" + }, + "numberOfCells": { + "default": null, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofcells", + "type": "integer" + }, + "numberOfFiles": { + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberoffiles", + "type": "integer" + }, + "numberOfSamples": { + "default": null, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofsamples", + "type": "integer" + }, + "numberOfSubjects": { + "default": null, + "linkml_meta": { + "domain_of": [ + "AssetsSummary" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Numberofsubjects", + "type": "integer" + }, + "species": { + "default": null, + "items": { + "$ref": "#/$defs/SpeciesType" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "Participant" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Species", + "type": "array" + }, + "variableMeasured": { + "default": null, + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "AssetsSummary", + "BareAsset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Variablemeasured", + "type": "array" + } + }, + "required": [ + "numberOfBytes", + "numberOfFiles" + ], + "title": "AssetsSummary", + "type": "object" + }, + "ContactPoint": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "ContactPoint", + "default": "ContactPoint", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "email": { + "default": null, + "description": "Email address of contact.", + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "url": { + "default": null, + "description": "A Web page to find information on how to contact.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + } + }, + "title": "ContactPoint", + "type": "object" + }, + "Disorder": { + "additionalProperties": false, + "description": "Biolink, SNOMED, or other identifier for disorder studied", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Disorder", + "default": "Disorder", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "dxdate": { + "default": null, + "description": "Dates of diagnosis", + "items": { + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "format": "date-time", + "type": "string" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "date" + }, + { + "range": "datetime" + } + ], + "domain_of": [ + "Disorder" + ] + }, + "title": "Dates of diagnosis", + "type": "array" + } + }, + "title": "Disorder", + "type": "object" + }, + "Equipment": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Equipment", + "default": "Equipment", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the equipment.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "A name for the equipment.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "Equipment", + "type": "object" + }, + "EthicsApproval": { + "additionalProperties": false, + "description": "Information about ethics committee approval for project", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "EthicsApproval", + "default": "EthicsApproval", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "contactPoint": { + "$ref": "#/$defs/ContactPoint", + "default": null, + "description": "Information about the ethics approval committee.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + } + }, + "identifier": { + "description": "Approved Protocol identifier, often a number or alphanumeric string.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Approved protocol identifier", + "type": "string" + } + }, + "required": [ + "identifier" + ], + "title": "EthicsApproval", + "type": "object" + }, + "GenericType": { + "additionalProperties": false, + "description": "An object to capture any type for about", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "GenericType", + "default": "GenericType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "GenericType", + "type": "object" + }, + "LicenseType": { + "enum": [ + "spdx:CC-BY-4.0", + "spdx:CC0-1.0" + ], + "title": "LicenseType", + "type": "string" + }, + "MeasurementTechniqueType": { + "additionalProperties": false, + "description": "Identifier for measurement technique used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "MeasurementTechniqueType", + "default": "MeasurementTechniqueType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "MeasurementTechniqueType", + "type": "object" + }, + "Organization": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Organization", + "default": "Organization", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "Use an ror.org identifier for institutions.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A ror.org identifier", + "type": "string" + }, + "includeInCitation": { + "default": false, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "False" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "contactPoint": { + "default": null, + "description": "Contact for the organization", + "items": { + "$ref": "#/$defs/ContactPoint" + }, + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "EthicsApproval", + "Organization" + ] + }, + "title": "Organization contact information", + "type": "array" + } + }, + "title": "Organization", + "type": "object" + }, + "Person": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Person", + "default": "Person", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "awardNumber": { + "default": null, + "description": "Identifier associated with a sponsored or gift award.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Identifier for an award", + "type": "string" + }, + "email": { + "default": null, + "linkml_meta": { + "domain_of": [ + "ContactPoint", + "Contributor" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "title": "Email", + "type": "string" + }, + "identifier": { + "default": null, + "description": "An ORCID (orcid.org) identifier for an individual.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "An ORCID identifier", + "type": "string" + }, + "includeInCitation": { + "default": true, + "description": "A flag to indicate whether a contributor should be included when generating a citation for the item.", + "linkml_meta": { + "domain_of": [ + "Contributor" + ], + "ifabsent": "True" + }, + "title": "Include contributor in citation", + "type": "boolean" + }, + "name": { + "description": "Use the format: familyname, given names ...", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Use Last, First. Example: Lovelace, Augusta Ada", + "type": "string" + }, + "roleName": { + "default": null, + "description": "Role(s) of the contributor. Multiple roles can be selected.", + "items": { + "$ref": "#/$defs/RoleType" + }, + "linkml_meta": { + "domain_of": [ + "Contributor" + ] + }, + "title": "Role", + "type": "array" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "affiliation": { + "default": null, + "description": "An organization that this person is affiliated with.", + "items": { + "$ref": "#/$defs/Affiliation" + }, + "linkml_meta": { + "domain_of": [ + "Person" + ] + }, + "title": "Affiliation", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Person", + "type": "object" + }, + "Project": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Project", + "default": "Project", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "A brief description of the project.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the project that generated this Dandiset or asset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name of project", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "Project", + "type": "object" + }, + "PublishActivity": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "PublishActivity", + "default": "PublishActivity", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "description": { + "default": null, + "description": "The description of the activity.", + "linkml_meta": { + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "endDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Enddate", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "description": "The name of the activity.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Title", + "type": "string" + }, + "startDate": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Startdate", + "type": "string" + }, + "used": { + "default": null, + "description": "A listing of equipment used for the activity.", + "items": { + "$ref": "#/$defs/Equipment" + }, + "linkml_meta": { + "domain_of": [ + "Activity" + ] + }, + "title": "Used", + "type": "array" + }, + "wasAssociatedWith": { + "default": null, + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Agent" + }, + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + }, + { + "$ref": "#/$defs/Software" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + }, + { + "range": "Software" + }, + { + "range": "Agent" + } + ], + "domain_of": [ + "Activity" + ] + }, + "title": "Wasassociatedwith", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "PublishActivity", + "type": "object" + }, + "RelationType": { + "description": "An enumeration of resource relations", + "enum": [ + "dcite:IsCitedBy", + "dcite:Cites", + "dcite:IsSupplementTo", + "dcite:IsSupplementedBy", + "dcite:IsContinuedBy", + "dcite:Continues", + "dcite:Describes", + "dcite:IsDescribedBy", + "dcite:HasMetadata", + "dcite:IsMetadataFor", + "dcite:HasVersion", + "dcite:IsVersionOf", + "dcite:IsNewVersionOf", + "dcite:IsPreviousVersionOf", + "dcite:IsPartOf", + "dcite:HasPart", + "dcite:IsReferencedBy", + "dcite:References", + "dcite:IsDocumentedBy", + "dcite:Documents", + "dcite:IsCompiledBy", + "dcite:Compiles", + "dcite:IsVariantFormOf", + "dcite:IsOriginalFormOf", + "dcite:IsIdenticalTo", + "dcite:IsReviewedBy", + "dcite:Reviews", + "dcite:IsDerivedFrom", + "dcite:IsSourceOf", + "dcite:IsRequiredBy", + "dcite:Requires", + "dcite:Obsoletes", + "dcite:IsObsoletedBy", + "dcite:IsPublishedIn" + ], + "title": "RelationType", + "type": "string" + }, + "Resource": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Resource", + "default": "Resource", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "A title of the resource", + "type": "string" + }, + "relation": { + "$ref": "#/$defs/RelationType", + "description": "Indicates how the resource is related to the dataset. This relation should satisfy: dandiset resource.", + "linkml_meta": { + "domain_of": [ + "RelatedParticipant", + "Resource" + ] + }, + "title": "Resource relation" + }, + "repository": { + "default": null, + "description": "Name of the repository in which the resource is housed.", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ] + }, + "title": "Name of the repository", + "type": "string" + }, + "resourceType": { + "$ref": "#/$defs/ResourceType", + "default": null, + "description": "The type of resource.", + "linkml_meta": { + "domain_of": [ + "Resource" + ] + }, + "title": "Resource type" + }, + "url": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "URL of the resource", + "type": "string" + } + }, + "required": [ + "relation" + ], + "title": "Resource", + "type": "object" + }, + "ResourceType": { + "description": "An enumeration of resource types", + "enum": [ + "dcite:Audiovisual", + "dcite:Book", + "dcite:BookChapter", + "dcite:Collection", + "dcite:ComputationalNotebook", + "dcite:ConferencePaper", + "dcite:ConferenceProceeding", + "dcite:DataPaper", + "dcite:Dataset", + "dcite:Dissertation", + "dcite:Event", + "dcite:Image", + "dcite:Instrument", + "dcite:InteractiveResource", + "dcite:Journal", + "dcite:JournalArticle", + "dcite:Model", + "dcite:OutputManagementPlan", + "dcite:PeerReview", + "dcite:PhysicalObject", + "dcite:Preprint", + "dcite:Report", + "dcite:Service", + "dcite:Software", + "dcite:Sound", + "dcite:Standard", + "dcite:StudyRegistration", + "dcite:Text", + "dcite:Workflow", + "dcite:Other" + ], + "title": "ResourceType", + "type": "string" + }, + "RoleType": { + "description": "An enumeration of roles", + "enum": [ + "dcite:Author", + "dcite:Conceptualization", + "dcite:ContactPerson", + "dcite:DataCollector", + "dcite:DataCurator", + "dcite:DataManager", + "dcite:FormalAnalysis", + "dcite:FundingAcquisition", + "dcite:Investigation", + "dcite:Maintainer", + "dcite:Methodology", + "dcite:Producer", + "dcite:ProjectLeader", + "dcite:ProjectManager", + "dcite:ProjectMember", + "dcite:ProjectAdministration", + "dcite:Researcher", + "dcite:Resources", + "dcite:Software", + "dcite:Supervision", + "dcite:Validation", + "dcite:Visualization", + "dcite:Funder", + "dcite:Sponsor", + "dcite:StudyParticipant", + "dcite:Affiliation", + "dcite:EthicsApproval", + "dcite:Other" + ], + "title": "RoleType", + "type": "string" + }, + "Software": { + "additionalProperties": false, + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Software", + "default": "Software", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "RRID of the software from scicrunch.org.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Research resource identifier", + "type": "string" + }, + "name": { + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + }, + "url": { + "default": null, + "description": "Web page for the software.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Url", + "type": "string" + }, + "version": { + "linkml_meta": { + "domain_of": [ + "Dandiset", + "Software" + ] + }, + "title": "Version", + "type": "string" + } + }, + "required": [ + "name", + "version" + ], + "title": "Software", + "type": "object" + }, + "SpeciesType": { + "additionalProperties": false, + "description": "Identifier for species of the sample", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "SpeciesType", + "default": "SpeciesType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "SpeciesType", + "type": "object" + }, + "StandardsType": { + "additionalProperties": false, + "description": "Identifier for data standard used", + "properties": { + "id": { + "default": null, + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "StandardsType", + "default": "StandardsType", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "identifier": { + "default": null, + "description": "The identifier can be any url or a compact URI, preferably supported by identifiers.org.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "pattern": "^[a-zA-Z0-9-]+:[a-zA-Z0-9-/\\._]+$", + "range": "string" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Identifier", + "type": "string" + }, + "name": { + "default": null, + "description": "The name of the item.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Name", + "type": "string" + } + }, + "title": "StandardsType", + "type": "object" + } + }, + "additionalProperties": false, + "description": "A body of structured information describing a DANDI dataset.", + "properties": { + "id": { + "description": "Uniform resource identifier", + "linkml_meta": { + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Id", + "type": "string" + }, + "schemaKey": { + "const": "Dandiset", + "default": "Dandiset", + "linkml_meta": { + "designates_type": true, + "domain_of": [ + "DandiBaseModel" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemakey", + "type": "string" + }, + "about": { + "default": null, + "description": "The subject matter of the content, such as disorders, brain anatomy.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Anatomy" + }, + { + "$ref": "#/$defs/Disorder" + }, + { + "$ref": "#/$defs/GenericType" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "range": "Disorder" + }, + { + "range": "Anatomy" + }, + { + "range": "GenericType" + } + ], + "domain_of": [ + "CommonModel" + ] + }, + "title": "Subject matter of the dataset", + "type": "array" + }, + "access": { + "default": null, + "items": { + "$ref": "#/$defs/AccessRequirements" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to express the default factory, at 0xADDRESS>, in LinkML.", + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Access information", + "type": "array" + }, + "acknowledgement": { + "default": null, + "description": "Any acknowledgments not covered by contributors or external resources.", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Acknowledgement", + "type": "string" + }, + "contributor": { + "description": "People or Organizations that have contributed to this Dandiset.", + "items": { + "anyOf": [ + { + "$ref": "#/$defs/Organization" + }, + { + "$ref": "#/$defs/Person" + } + ] + }, + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Person" + }, + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ], + "range": "Organization" + } + ], + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, >." + ] + }, + "minItems": 1, + "title": "Dandiset contributors", + "type": "array" + }, + "description": { + "description": "A description of the Dandiset", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,10000}\\Z" + } + ], + "domain_of": [ + "AccessRequirements", + "Activity", + "CommonModel", + "Equipment" + ] + }, + "title": "Description", + "type": "string" + }, + "ethicsApproval": { + "default": null, + "items": { + "$ref": "#/$defs/EthicsApproval" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Ethics approvals", + "type": "array" + }, + "keywords": { + "default": null, + "description": "Keywords used to describe this content.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Keywords", + "type": "array" + }, + "license": { + "description": "Licenses associated with the item. DANDI only supports a subset of Creative Commons Licenses (creativecommons.org) applicable to datasets.", + "items": { + "$ref": "#/$defs/LicenseType" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "minItems": 1, + "title": "License", + "type": "array" + }, + "name": { + "description": "A title associated with the Dandiset.", + "linkml_meta": { + "all_of": [ + { + "pattern": "^[\\s\\S]{,150}\\Z" + } + ], + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "BaseType", + "CommonModel", + "Contributor", + "Equipment", + "RelatedParticipant", + "Resource", + "Software" + ] + }, + "title": "Dandiset title", + "type": "string" + }, + "protocol": { + "default": null, + "description": "A list of persistent URLs describing the protocol (e.g. protocols.io, or other DOIs).", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ] + }, + "title": "Protocol", + "type": "array" + }, + "relatedResource": { + "default": null, + "items": { + "$ref": "#/$defs/Resource" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the after validation function, ." + ] + }, + "title": "Relatedresource", + "type": "array" + }, + "repository": { + "default": null, + "description": "location of the item", + "linkml_meta": { + "domain_of": [ + "CommonModel", + "Resource" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Repository", + "type": "string" + }, + "schemaVersion": { + "default": "0.8.0", + "linkml_meta": { + "domain_of": [ + "CommonModel" + ], + "ifabsent": "string(0.8.0)", + "readonly": "Read-only for clients; managed by server" + }, + "title": "Schemaversion", + "type": "string" + }, + "studyTarget": { + "default": null, + "description": "Objectives or specific questions of the study.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel" + ] + }, + "title": "Studytarget", + "type": "array" + }, + "url": { + "default": null, + "description": "Permalink to the Dandiset.", + "linkml_meta": { + "domain_of": [ + "Agent", + "CommonModel", + "ContactPoint", + "Contributor", + "RelatedParticipant", + "Resource", + "Software" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Url", + "type": "string" + }, + "wasGeneratedBy": { + "default": null, + "description": "Project(s) that generated this Dandiset.", + "items": { + "$ref": "#/$defs/Project" + }, + "linkml_meta": { + "domain_of": [ + "CommonModel", + "GenotypeInfo" + ] + }, + "title": "Associated projects", + "type": "array" + }, + "assetsSummary": { + "$ref": "#/$defs/AssetsSummary", + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + } + }, + "citation": { + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Citation", + "type": "string" + }, + "dateCreated": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Dandiset creation date and time.", + "type": "string" + }, + "dateModified": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "BareAsset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Last modification date and time.", + "type": "string" + }, + "datePublished": { + "default": null, + "format": "date-time", + "linkml_meta": { + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Datepublished", + "type": "string" + }, + "doi": { + "default": null, + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "DOI", + "type": "string" + }, + "identifier": { + "description": "A Dandiset identifier that can be resolved by identifiers.org.", + "linkml_meta": { + "domain_of": [ + "Activity", + "Affiliation", + "Agent", + "Allele", + "Asset", + "BaseType", + "BioSample", + "Contributor", + "Dandiset", + "Equipment", + "EthicsApproval", + "Locus", + "Participant", + "RelatedParticipant", + "Resource", + "Software" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Dandiset identifier", + "type": "string" + }, + "manifestLocation": { + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "readonly": "Read-only for clients; managed by server" + }, + "minItems": 1, + "title": "Manifestlocation", + "type": "array" + }, + "publishedBy": { + "anyOf": [ + { + "$ref": "#/$defs/PublishActivity" + }, + { + "type": "string" + } + ], + "default": null, + "description": "The URL should contain the provenance of the publishing process.", + "linkml_meta": { + "any_of": [ + { + "notes": [ + "pydantic2linkml: Unable to translate the logic contained in the wrap validation function, .wrap_val at 0xADDRESS>." + ], + "pattern": "^(?i:http|https)://[^\\s]+$", + "range": "uri" + }, + { + "range": "PublishActivity" + } + ], + "domain_of": [ + "Asset", + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Publishedby" + }, + "releaseNotes": { + "default": null, + "description": "The description of the release", + "linkml_meta": { + "domain_of": [ + "Dandiset" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Releasenotes", + "type": "string" + }, + "sameAs": { + "default": null, + "description": "Known DANDI URLs of the Dandiset at other DANDI instances.", + "items": { + "type": "string" + }, + "linkml_meta": { + "domain_of": [ + "BareAsset", + "BioSample", + "Dandiset", + "Participant" + ] + }, + "title": "Sameas", + "type": "array" + }, + "version": { + "linkml_meta": { + "domain_of": [ + "Dandiset", + "Software" + ], + "readonly": "Read-only for clients; managed by server" + }, + "title": "Version", + "type": "string" + } + }, + "required": [ + "id", + "contributor", + "description", + "license", + "name", + "assetsSummary", + "citation", + "identifier", + "manifestLocation", + "version" + ], + "title": "Dandiset", + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema" +}