{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "title": "CDIF Data Description metadata profile",
  "description": "CDIF Data Description profile. Composes cdifCore with discovery properties and data description extensions for detailed variable and structure documentation.",
  "properties": {
    "@context": {
      "type": "object",
      "description": "Additional namespace prefix for data description properties.",
      "properties": {
        "csvw": {
          "const": "http://www.w3.org/ns/csvw#"
        }
      }
    },
    "@id": {
      "type": "string",
      "description": "The URI for the resource should be the @id value for the root of the JSON instance document tree. Must be an IRI (e.g. https://doi.org/..., urn:..., or a relative URI like #localid). Note that this identifier can be interpreted to identify the resource that is the subject of this metadata record, or the JSON-LD object that is the digital object containing the metadata information."
    },
    "@type": {
      "description": "a schema.org Class that specifies the expected information content for the metadata record. The array must include at least one schema.org type value. Default is schema:Dataset.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "schema:CreativeWork",
          "schema:SoftwareApplication",
          "schema:SoftwareSourceCode",
          "schema:Product",
          "schema:WebAPI",
          "schema:Dataset",
          "schema:DigitalDocument",
          "schema:Collection",
          "schema:ImageObject",
          "schema:DataCatalog",
          "schema:DefinedTermSet",
          "schema:MediaObject"
        ]
      },
      "default": "schema:Dataset",
      "minItems": 1,
      "contains": {
        "const": "schema:Dataset"
      }
    },
    "schema:name": {
      "type": "string",
      "description": "A descriptive name of a dataset (e.g., 'Snow depth in Northern Hemisphere'). The name should uniquely identify the described resource for human use, in the scope of the metadata catalog containing this metadata record."
    },
    "schema:description": {
      "type": "string",
      "description": "A short summary describing a dataset. This text will be indexed by search applications, so the more information here, the better."
    },
    "schema:identifier": {
      "description": "The primary identifier for the dataset; other identifiers should be listed in the sameAs field. Schema.org has three ways of encoding identifiers-- a text description, a URL, or by using the schema:PropertyValue field. The Science on Schema.org guidance strongly recommends using the PropertyValue approach. see https://github.com/ESIPFed/science-on-schema.org   .... Dataset.md#identifier.  Ideally, for any given data provided they would provide identifiers either all as strings or all as identifier_type.",
      "anyOf": [
        {
          "$ref": "#/$defs/Identifier"
        },
        {
          "type": "string"
        }
      ]
    },
    "schema:additionalType": {
      "description": "identifiers for datatypes from other vocabularies (not schema.org) that apply to this metadata.",
      "type": "array",
      "minItems": 0,
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "$ref": "#/$defs/DefinedTerm"
          }
        ]
      }
    },
    "schema:sameAs": {
      "description": "Other identifiers for the dataset, as IRI references, literal strings, or structured identifiers using schema:PropertyValue.",
      "type": "array",
      "minItems": 1,
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string",
                "description": "IRI for an equivalent resource or alternate identifier"
              }
            }
          },
          {
            "$ref": "#/$defs/Identifier"
          }
        ]
      }
    },
    "schema:version": {
      "type": [
        "string",
        "number"
      ],
      "description": "The version number or identifier for this dataset (text or numeric). The values should sort from oldest to newest using an alphanumeric sort on version strings"
    },
    "schema:inLanguage": {
      "type": "string",
      "description": "the language of the dataset content"
    },
    "schema:dateModified": {
      "type": "string",
      "description": "ISO8601 formatted date (and optional time if relevant) when Dataset was last updated"
    },
    "schema:datePublished": {
      "type": "string",
      "description": "ISO8601 formatted date (and optional time if relevant) when Dataset was made public."
    },
    "schema:conditionsOfAccess": {
      "description": "text statement of conditions for use and access; if an online resource documents the restrictions or a URI is used to identify the conditions, recommend using schema:CreativeWork to provide a label (name) and an identifier (URI or URL). ",
      "type": "array",
      "minItems": 0,
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string",
                "description": "a reference to a resource defining conditions of Access"
              }
            }
          },
          {
            "$ref": "#/$defs/Reference"
          }
        ]
      }
    },
    "schema:license": {
      "description": "legal statement of conditions for use and access; recommend using schema:CreativeWork to provide a label (name) for the license, and an identifier. Sources of license identifiers: https://opensource.org/licenses/, https://creativecommons.org/about/cclicenses/, https://spdx.org/licenses/, http://cor.esipfed.org/ont/earthcube/swl. If only a string is provided, it should be an identifier for the license, ideally a resolvable URI",
      "type": "array",
      "minItems": 0,
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string",
                "description": "a reference to a license defintion"
              }
            }
          },
          {
            "$ref": "#/$defs/Reference"
          }
        ]
      }
    },
    "schema:url": {
      "type": "string",
      "format": "uri",
      "description": "Web Location of a page describing the dataset (landing page), typically providing links or instructions to get the actual resource content; analogous to dcat:accessURL. If a direct link is available to get the data, put in distribution/contentUrl"
    },
    "schema:distribution": {
      "description": "Each schema:DataDownload distribution item SHOULD additionally be typed as cdi:PhysicalDataSet or one of its subclasses (cdi:TabularTextDataSet, cdi:StructuredDataSet). schema:WebAPI distribution items do not require a cdi: dataset type. Not enforced at schema level (the merge with cdifCore and cdifArchiveDistribution drops the @type constraint at profile resolution); consider a SHACL rule if runtime enforcement is needed.",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "description": "schema to document file-based access to a resoruce via URL, based on schema.org/DataDownload",
            "type": "object",
            "properties": {
              "@id": {
                "type": "string"
              },
              "@type": {
                "type": "array",
                "description": "implement as array because extensions might need to add additional types",
                "items": {
                  "type": "string"
                },
                "contains": {
                  "const": "schema:DataDownload"
                },
                "minItems": 1
              },
              "schema:name": {
                "type": "string"
              },
              "schema:description": {
                "type": "string",
                "description": "Description of this distribution, e.g. what format, access constraints, etc."
              },
              "schema:contentUrl": {
                "type": "string",
                "format": "uri"
              },
              "schema:encodingFormat": {
                "type": "array",
                "description": "MIME type with extension; should indicate the serialization scheme in sufficient detail that machine can know how to parse.",
                "items": {
                  "type": "string"
                }
              },
              "spdx:checksum": {
                "type": "object",
                "description": "A string value calculated from the content of the resource representation, used to test if content has been modified. The checksum is a property of a particular distribution/DataDownload.",
                "properties": {
                  "@type": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "contains": {
                      "const": "spdx:Checksum"
                    },
                    "minItems": 1
                  },
                  "spdx:algorithm": {
                    "type": "string"
                  },
                  "spdx:checksumValue": {
                    "type": "string"
                  }
                },
                "required": [
                  "@type"
                ]
              },
              "dcterms:conformsTo": {
                "description": "An identifier for a standard or specification that the distribution conforms to. Recommended to enable machine-actionable data access.",
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "properties": {
                    "@id": {
                      "type": "string",
                      "description": "uri for specification that this distribution conforms to"
                    }
                  }
                }
              },
              "schema:provider": {
                "type": "array",
                "description": "Party who maintains this particular distribution option for the dataset. Use this property if there are multiple distributions from different providers",
                "items": {
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "@id": {
                          "type": "string",
                          "description": "a identifier for an agent defined in this metadata, or externally; must be dereferenceable"
                        }
                      },
                      "required": [
                        "@id"
                      ]
                    },
                    {
                      "$ref": "#/$defs/Person"
                    },
                    {
                      "$ref": "#/$defs/Organization"
                    }
                  ]
                }
              }
            },
            "required": [
              "schema:contentUrl",
              "@type"
            ]
          },
          {
            "title": "Direct data access to a resource via web servcie",
            "description": "use schema.org Action to document url or url template and parameters to request data through a web accessible location. At this point, schema is set up for one action-- an HTTP Get that requests data. The url template parameters (in curly brackets '{}') specify query paramters to filter the source data, request particular output formats or other aspects of data.",
            "type": "object",
            "properties": {
              "@type": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "contains": {
                  "const": "schema:WebAPI"
                },
                "minItems": 1
              },
              "schema:serviceType": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/DefinedTerm"
                  }
                ],
                "description": "specify the kind of service. Ideally this should be a resolvable identifier. Currently there is no widely adopted registry for serviceType identifiers, in large part because services might be defined at different levels of granularity, and classifications might focus on function, data formats, thematic content, security, or other aspects of the service definition. For interoperability, there must be an external arrangement between data providers and consumers on the strings that will be used to specify service types."
              },
              "schema:termsOfService": {
                "description": "Description of access privileges required to use the API, e.g. registration, licensing, payments. Note that access constraints applying to all distributions of the resource should be specified in the access constraints for the resource description as a whole.",
                "oneOf": [
                  {
                    "type": "string",
                    "default": "not specified"
                  },
                  {
                    "$ref": "#/$defs/Reference"
                  }
                ]
              },
              "schema:documentation": {
                "description": "a document that provides a machine-actionable description of a service instance. Examples include OpenAPI documents, OGC Capabilities documents. Software designed to utilise a particular service type will typically include functionality to parse such a description document and engage with the service endpoint. If such a document is available for the service instance providing the resource distribution, it should be included in the distribution metadata.",
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/Reference"
                  }
                ]
              },
              "schema:potentialAction": {
                "type": "array",
                "description": "actions that can be invoked via the API",
                "items": {
                  "title": "Action ",
                  "type": "object",
                  "description": "this element defines an action (operation) that can be invoked via messages using the protocol defined. In most cases this will be an http request via TCP/IP, but in desktop or LAN environments, other protocols might be used. The target property defines the endpoint and syntax for invoking the action. Result specifies the encoding format for the (possible) response(s) when the action is invoked. Object specifies the information model for the resource that is the object of the action. This approach is an adoptation of the Action Blog Post from schema.org (see https://schema.org/docs/actions.html, and https://github.com/schemaorg/suggestions-questions-brainstorming/issues/62) ",
                  "properties": {
                    "@type": {
                      "description": "The type of action. Must be schema:Action or one of its subtypes.",
                      "default": "schema:Action",
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "contains": {
                        "enum": [
                          "schema:Action",
                          "schema:AssessAction",
                          "schema:ConsumeAction",
                          "schema:ControlAction",
                          "schema:CreateAction",
                          "schema:DeleteAction",
                          "schema:FindAction",
                          "schema:InteractAction",
                          "schema:MoveAction",
                          "schema:PlayAction",
                          "schema:SearchAction",
                          "schema:TransferAction",
                          "schema:UpdateAction"
                        ]
                      },
                      "minItems": 1
                    },
                    "schema:name": {
                      "type": "string",
                      "description": "text label for the action"
                    },
                    "schema:target": {
                      "type": "object",
                      "description": "specifies the request target location and request syntax. Documentation of the URL end point and syntax to invoke the service. This schema doesn't handle post requests.",
                      "properties": {
                        "@type": {
                          "default": "schema:EntryPoint",
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "contains": {
                            "const": "schema:EntryPoint"
                          },
                          "minItems": 1
                        },
                        "schema:description": {
                          "type": "string"
                        },
                        "schema:urlTemplate": {
                          "type": "string",
                          "description": "a templated URL; parameters are enclosed in curly braces ({..}); parameters are not required. If included, parameters MUST be documented in the query-input element. Template should be consitent with URI Template (https://datatracker.ietf.org/doc/html/rfc6570) examples: - http://portal.chordsrt.com/api/v1/data.{encoding}; single parameter - http://portal.chordsrt.com/api/v1/data.{encoding}?instruments={instruments}&start={start}&end={end} ; multiple parameters - {endpoint}{encoding}; endpoint URL path is a parameter,should only appear in potential actions for API specification descriptions, which are generic-not specific to a particular endpoint."
                        },
                        "schema:httpMethod": {
                          "title": "HTTP Method",
                          "description": "only applicable if protocol is http or a protocol that tunnels on http",
                          "type": "array",
                          "items": {
                            "type": "string",
                            "default": "GET",
                            "enum": [
                              "GET",
                              "PUT",
                              "POST",
                              "PATCH",
                              "DELETE",
                              "COPY",
                              "HEAD",
                              "OPTIONS",
                              "PROPFIND"
                            ]
                          }
                        },
                        "schema:contentType": {
                          "type": "array",
                          "description": "The supported content type(s) for an EntryPoint response. a MIME type (https://www.iana.org/assignments/media-types/media-types.xhtml) that specifies the content type for messages in resonses from the service endpoint. This is a schema.org property, and is redundant with encodingFormat in the result property for the Action.",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "required": [
                        "schema:urlTemplate"
                      ]
                    },
                    "schema:result": {
                      "type": "object",
                      "description": "specifies the serialization scheme (encoding format, information model) for expected representation of the data. Documentation of the serialization format for the API response.",
                      "properties": {
                        "@type": {
                          "type": "array",
                          "description": "Type of result object. Typically schema:DataDownload, but may include additional types.",
                          "items": {
                            "type": "string"
                          },
                          "contains": {
                            "const": "schema:DataDownload"
                          },
                          "minItems": 1
                        },
                        "schema:encodingFormat": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "schema:description": {
                          "type": "string"
                        }
                      }
                    },
                    "schema:object": {
                      "type": "object",
                      "description": "The entity upon which the action is carried out, whose state is kept intact or changed. This is an open ended class for general description of Actions. When schema:Action (or a subclass) is used to describe operations for a WebAPI distribution, the object is implicitly the resource that is the subject of the containing metadata record, so this property would be superfluous.",
                      "properties": {
                        "@type": {
                          "default": "schema:Thing",
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "minItems": 1
                        },
                        "schema:description": {
                          "type": "string"
                        }
                      }
                    },
                    "schema:query-input": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "Query input parameter for a web API action, typed as schema:PropertyValueSpecification.",
                        "properties": {
                          "@id": {
                            "type": "string"
                          },
                          "@type": {
                            "default": "schema:PropertyValueSpecification",
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "contains": {
                              "const": "schema:PropertyValueSpecification"
                            },
                            "minItems": 1
                          },
                          "schema:valueName": {
                            "type": "string"
                          },
                          "schema:description": {
                            "type": "string"
                          },
                          "schema:valueRequired": {
                            "type": "boolean",
                            "default": true
                          },
                          "schema:valuePattern": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "schema:valueName",
                          "schema:description"
                        ]
                      },
                      "description": "set of explanations of the parameters in the URL template for the target."
                    }
                  },
                  "required": [
                    "schema:name",
                    "schema:target"
                  ]
                }
              }
            },
            "required": [
              "schema:serviceType",
              "schema:potentialAction",
              "schema:termsOfService"
            ]
          }
        ],
        "properties": {
          "cdif:hasPhysicalMapping": {
            "type": "array",
            "description": "Per-field physical mappings linking the variables measured by this distribution to their physical representation in the file - column index, format, physical data type, length, null sequence, etc. Applies to schema:DataDownload items typed as cdi:PhysicalDataSet or one of its subclasses. Each item is a cdifPhysicalMapping.",
            "items": {
              "title": "Physical Mapping Type",
              "description": "Defines implementation-specific properties for the representation of a variable in a dataset. Aligned with CDIF 2026 schema using DDI-CDI flat per-column mapping structure.",
              "type": "object",
              "properties": {
                "cdif:index": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Non-negative integer that orders the fields in the data structure (column number)."
                },
                "cdif:format": {
                  "type": "string",
                  "description": "A format for number expressed as a string, or date format like YYYY/MM or MM-DD-YY."
                },
                "cdif:physicalDataType": {
                  "type": "string"
                },
                "cdi:length": {
                  "type": "integer",
                  "description": "The column width if the tabular text is fixed width."
                },
                "cdi:nullSequence": {
                  "type": "string",
                  "description": "The value of this property becomes the null annotation for the described column."
                },
                "cdi:defaultValue": {
                  "type": "string",
                  "description": "A default string indicating the value to substitute for an empty string."
                },
                "cdi:scale": {
                  "type": "integer"
                },
                "cdi:decimalPositions": {
                  "type": "integer"
                },
                "cdi:minimumLength": {
                  "type": "integer"
                },
                "cdi:maximumLength": {
                  "type": "integer"
                },
                "cdi:isRequired": {
                  "type": "boolean",
                  "default": false
                },
                "cdif:formats_InstanceVariable": {
                  "type": "object",
                  "description": "Reference to a variable defined in schema:variableMeasured.",
                  "properties": {
                    "@id": {
                      "type": "string",
                      "description": "This should be a reference to a variable defined in the schema:variableMeasured section."
                    }
                  }
                }
              }
            }
          },
          "cdi:characterSet": {
            "type": "string",
            "description": "The character set used in the distribution (e.g., UTF-8, ASCII)."
          },
          "cdif:fileSize": {
            "type": "number",
            "description": "The size of the distribution file."
          },
          "cdif:fileSizeUofM": {
            "type": "string",
            "description": "Unit of measure for the file size (e.g., bytes, KB, MB, GB)."
          },
          "schema:potentialAction": {
            "description": "For schema:WebAPI distributions, the potentialAction.result describes the physical realization of the API response bytes - analogous to a DataDownload distribution. The result MAY be additionally typed as cdi:PhysicalDataSet or one of its subclasses, and MAY carry the same physical-realization properties (cdif:hasPhysicalMapping, cdi:characterSet, cdif:fileSize, cdif:fileSizeUofM) as a DataDownload distribution. cdi:PhysicalDataSet typing belongs on the result, NOT on the WebAPI distribution itself - the WebAPI distribution describes the service; the result describes the bytes the service produces.",
            "items": {
              "properties": {
                "schema:result": {
                  "properties": {
                    "cdif:hasPhysicalMapping": {
                      "type": "array",
                      "description": "Per-field physical mappings for the API response bytes. cdif:formats_InstanceVariable should reference the @ids of variables in the parent dataset's schema:variableMeasured (the API response is another physical realization of those same InstanceVariables).",
                      "items": {
                        "title": "Physical Mapping Type",
                        "description": "Defines implementation-specific properties for the representation of a variable in a dataset. Aligned with CDIF 2026 schema using DDI-CDI flat per-column mapping structure.",
                        "type": "object",
                        "properties": {
                          "cdif:index": {
                            "type": "integer",
                            "minimum": 0,
                            "description": "Non-negative integer that orders the fields in the data structure (column number)."
                          },
                          "cdif:format": {
                            "type": "string",
                            "description": "A format for number expressed as a string, or date format like YYYY/MM or MM-DD-YY."
                          },
                          "cdif:physicalDataType": {
                            "type": "string"
                          },
                          "cdi:length": {
                            "type": "integer",
                            "description": "The column width if the tabular text is fixed width."
                          },
                          "cdi:nullSequence": {
                            "type": "string",
                            "description": "The value of this property becomes the null annotation for the described column."
                          },
                          "cdi:defaultValue": {
                            "type": "string",
                            "description": "A default string indicating the value to substitute for an empty string."
                          },
                          "cdi:scale": {
                            "type": "integer"
                          },
                          "cdi:decimalPositions": {
                            "type": "integer"
                          },
                          "cdi:minimumLength": {
                            "type": "integer"
                          },
                          "cdi:maximumLength": {
                            "type": "integer"
                          },
                          "cdi:isRequired": {
                            "type": "boolean",
                            "default": false
                          },
                          "cdif:formats_InstanceVariable": {
                            "type": "object",
                            "description": "Reference to a variable defined in schema:variableMeasured.",
                            "properties": {
                              "@id": {
                                "type": "string",
                                "description": "This should be a reference to a variable defined in the schema:variableMeasured section."
                              }
                            }
                          }
                        }
                      }
                    },
                    "cdi:characterSet": {
                      "type": "string",
                      "description": "The character set used in the API response (e.g., UTF-8)."
                    },
                    "cdif:fileSize": {
                      "type": "number",
                      "description": "The size of the API response payload."
                    },
                    "cdif:fileSizeUofM": {
                      "type": "string",
                      "description": "Unit of measure for the response size (e.g., bytes, KB, MB)."
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "schema:relatedLink": {
      "type": "array",
      "description": "links to related resources; linkRelationship specifies how the resource is related.",
      "items": {
        "type": "object",
        "properties": {
          "@type": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "contains": {
              "const": "schema:LinkRole"
            },
            "minItems": 1
          },
          "schema:linkRelationship": {
            "anyOf": [
              {
                "$ref": "#/$defs/DefinedTerm"
              },
              {
                "type": "string"
              }
            ]
          },
          "schema:target": {
            "type": "object",
            "properties": {
              "@type": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "contains": {
                  "const": "schema:EntryPoint"
                },
                "minItems": 1
              },
              "schema:encodingFormat": {
                "type": "string",
                "description": "registered MIME types are expected"
              },
              "schema:name": {
                "type": "string"
              },
              "schema:url": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    },
    "schema:publishingPrinciples": {
      "description": "FDOF digitalObjectMutability, RDA digitalObjectPolicy, FDOF PersistencyPolicy. Policies related to maintenance, update, expected time to live. If an online resource documents the policies or a URI is used to identify the conditions, recommend using schema:CreativeWork to provide a label (name) and an identifier (URI or URL).",
      "type": "array",
      "minItems": 0,
      "items": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string",
                "description": "a reference to a publishing principles statement"
              }
            }
          },
          {
            "$ref": "#/$defs/Reference"
          }
        ]
      }
    },
    "schema:keywords": {
      "description": "Keywords are an array of strings, an array of schema:DefinedTerms, or some combination of these. If you have information about a controlled vocabulary from which keywords come from, use schema:DefinedTerm to descibe that keyword. This allowed variability makes parsing metadata hard; recommend using DefinedTerm for all keywords if any of them are from a known vocabulary, otherwise an array of strings.",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "$ref": "#/$defs/DefinedTerm"
          },
          {
            "type": "string"
          }
        ]
      }
    },
    "schema:creator": {
      "description": "author or orginator of intellectual content of dataset. Uset the JSON-LD @list construct to preserve author order. Use contributor with the Role property to specify other roles related to creation or stewardship of the resource.",
      "type": "object",
      "properties": {
        "@list": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "a identifier for an agent defined in this metadata, or externally; must be dereferenceable"
                  }
                },
                "required": [
                  "@id"
                ]
              },
              {
                "$ref": "#/$defs/Person"
              },
              {
                "$ref": "#/$defs/Organization"
              }
            ]
          }
        }
      }
    },
    "schema:contributor": {
      "description": "other parties who played a role in production of dataset",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string",
                "description": "a identifier for an agent defined in this metadata, or externally; must be dereferenceable"
              }
            },
            "required": [
              "@id"
            ]
          },
          {
            "$ref": "#/$defs/Person"
          },
          {
            "$ref": "#/$defs/Organization"
          },
          {
            "description": "For more granularity on how a person contributed to a Dataset, use schema:Role. The schema.org documentation does not state that the Role type is an expected data type of author, creator and contributor, but that is addressed in this blog post (http://blog.schema.org/2014/06/introducing-role.html). see https://github.com/ESIPFed/science-on-schema.org/blob/develop/guides/Dataset.md#roles-of-people",
            "type": "object",
            "properties": {
              "@type": {
                "default": "schema:Role",
                "type": "array",
                "items": {
                  "type": "string"
                },
                "contains": {
                  "const": "schema:Role"
                },
                "minItems": 1
              },
              "schema:roleName": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/DefinedTerm"
                  }
                ]
              },
              "schema:contributor": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "@id": {
                        "type": "string",
                        "description": "IRI reference to a Person or Organization defined elsewhere"
                      }
                    },
                    "required": [
                      "@id"
                    ]
                  },
                  {
                    "$ref": "#/$defs/Person"
                  },
                  {
                    "$ref": "#/$defs/Organization"
                  }
                ]
              }
            },
            "required": [
              "@type",
              "schema:roleName",
              "schema:contributor"
            ]
          }
        ]
      }
    },
    "schema:publisher": {
      "description": "Party who made the dataset publicly available",
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "@id": {
              "type": "string",
              "description": "a identifier for an agent defined in this metadata, or externally; must be dereferenceable"
            }
          },
          "required": [
            "@id"
          ]
        },
        {
          "$ref": "#/$defs/Person"
        },
        {
          "$ref": "#/$defs/Organization"
        }
      ]
    },
    "schema:provider": {
      "description": "Party who maintains the distribution options for the dataset. If there are multiple distributions from different providers, use the provider property on distribution/DataDownload",
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string",
                "description": "a identifier for an agent defined in this metadata, or externally; must be dereferenceable"
              }
            },
            "required": [
              "@id"
            ]
          },
          {
            "$ref": "#/$defs/Person"
          },
          {
            "$ref": "#/$defs/Organization"
          }
        ]
      }
    },
    "schema:funding": {
      "type": "array",
      "items": {
        "description": "Funding acknowledgement properties, profile of schema.org/MonetaryGrant",
        "type": "object",
        "properties": {
          "@id": {
            "type": "string",
            "description": "URI identifier for this funding record"
          },
          "@type": {
            "default": "schema:MonetaryGrant",
            "type": "array",
            "items": {
              "type": "string"
            },
            "contains": {
              "const": "schema:MonetaryGrant"
            },
            "minItems": 1
          },
          "schema:identifier": {
            "$ref": "#/$defs/Identifier",
            "description": "identifier for a particular grant"
          },
          "schema:description": {
            "type": "string",
            "description": "description of the funding or grant"
          },
          "schema:name": {
            "type": "string",
            "description": "title of the grant"
          },
          "schema:funder": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "a identifier for an agent defined in this metadata, or externally; must be dereferenceable"
                  }
                },
                "required": [
                  "@id"
                ]
              },
              {
                "$ref": "#/$defs/Person"
              },
              {
                "$ref": "#/$defs/Organization"
              }
            ]
          }
        },
        "anyOf": [
          {
            "required": [
              "schema:funder"
            ]
          },
          {
            "required": [
              "schema:identifier"
            ]
          },
          {
            "required": [
              "schema:name"
            ]
          }
        ]
      }
    },
    "prov:wasGeneratedBy": {
      "description": "Brief information about instruments, software or experimental protocols used",
      "type": "array",
      "items": {
        "title": "very simple links or names of software or instruments used to generate a resource.",
        "type": "object",
        "properties": {
          "@type": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "contains": {
              "const": "prov:Activity"
            }
          },
          "prov:used": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "@id": {
                      "type": "string",
                      "description": "a resolvable reference to a representation of the software or instrument used"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "prov:wasDerivedFrom": {
      "description": "Brief information about sources of data used in aggregate datasets",
      "type": "array",
      "items": {
        "title": "very simple links or names of data sources used to generate the described resource.",
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string",
                "description": "a resolvable reference to a representation of the software or instrument used"
              }
            }
          },
          {
            "$ref": "#/$defs/Reference"
          }
        ]
      }
    },
    "schema:subjectOf": {
      "type": "object",
      "description": "see https://github.com/Cross-Domain-Interoperability-Framework/Discovery/issues/13 for discussion on how to make assertion about the sample registration and metadata distinct from statements about the physical object",
      "properties": {
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "schema:Dataset"
          },
          "minItems": 1
        },
        "schema:additionalType": {
          "type": "array",
          "description": "additional type assertions for the catalog record node. dcat:CatalogRecord is required.",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "dcat:CatalogRecord"
          },
          "minItems": 1
        },
        "@id": {
          "type": "string",
          "description": "identifier for the metadata record"
        },
        "schema:about": {
          "type": "object",
          "properties": {
            "@id": {
              "type": "string",
              "description": "this must be the @id value of the node containing the resource description metadata"
            }
          }
        },
        "dcterms:conformsTo": {
          "type": "array",
          "items": {
            "allOf": [
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "uri for specifications that this metadata record conforms to"
                  }
                }
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "uri for specifications that this metadata record conforms to"
                  }
                }
              }
            ]
          },
          "minItems": 1,
          "allOf": [
            {
              "contains": {
                "type": "object",
                "properties": {
                  "@id": {
                    "const": "https://w3id.org/cdif/core/1.0"
                  }
                }
              }
            },
            {
              "contains": {
                "type": "object",
                "properties": {
                  "@id": {
                    "const": "https://w3id.org/cdif/data_description/1.0"
                  }
                }
              }
            }
          ]
        },
        "schema:maintainer": {
          "description": "Identification of the agent that maintains the metadata, with contact information. Should include person name and affiliation, or position name and affiliation, or just organization name. e-mail address is preferred contact information.",
          "anyOf": [
            {
              "$ref": "#/$defs/Person"
            },
            {
              "$ref": "#/$defs/Organization"
            }
          ]
        },
        "schema:sdDatePublished": {
          "description": "date of most recent update to the metadata content",
          "type": "string",
          "format": "date"
        },
        "schema:includedInDataCatalog": {
          "type": "object",
          "description": "identify the source for the origin the metadata record.",
          "properties": {
            "@id": {
              "type": "string",
              "description": "identifier for the graph node."
            },
            "@type": {
              "default": "schema:DataCatalog",
              "type": "array",
              "items": {
                "type": "string"
              },
              "contains": {
                "const": "schema:DataCatalog"
              },
              "minItems": 1
            },
            "schema:name": {
              "type": "string"
            },
            "schema:url": {
              "type": "string",
              "format": "uri",
              "description": "locator to access a landing page for the collection or catalog"
            },
            "schema:identifier": {
              "$ref": "#/$defs/Identifier",
              "description": "identifier for the collection or catalog; use identifier_type to provide information on identifier scheme and context for identifier"
            }
          }
        }
      },
      "required": [
        "schema:about",
        "dcterms:conformsTo",
        "schema:additionalType",
        "@type",
        "@id"
      ]
    },
    "cdif:hasPrimaryKey": {
      "anyOf": [
        {
          "title": "CDIF Key",
          "description": "Profile of ddi-cdi Key/PrimaryKey: a CDIF Key is the role of an ordered set of cdi:InstanceVariables (referenced via cdifInstanceVariable) that uniquely identify a data instance. Each variable's position in the key is recorded with an explicit cdi:ComponentPosition wrapper carrying cdi:indexes (the variable) and cdi:value (the integer position), matching the canonical DDI-CDI PrimaryKey structure in ddicdiDataStructure.",
          "type": "object",
          "properties": {
            "@type": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "contains": {
                "const": "cdif:Key"
              },
              "minItems": 1
            },
            "@id": {
              "type": "string",
              "description": "Identifier for this Key node."
            },
            "cdif:isComposedOf": {
              "type": "array",
              "description": "Ordered list of cdi:ComponentPosition wrappers. Each wrapper carries cdi:indexes (an inline cdifInstanceVariable or @id-reference to one declared elsewhere in the dataset) and cdi:value (the integer position in the key, 0- or 1-based).",
              "items": {
                "type": "object",
                "description": "ComponentPosition wrapper indexing one variable's position in the key.",
                "properties": {
                  "@type": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "contains": {
                      "const": "cdi:ComponentPosition"
                    },
                    "minItems": 1
                  },
                  "@id": {
                    "type": "string",
                    "description": "Identifier for this ComponentPosition node."
                  },
                  "cdi:indexes": {
                    "anyOf": [
                      {
                        "$ref": "#/$defs/CdifInstanceVariable"
                      },
                      {
                        "type": "object",
                        "description": "object reference via @id to a cdifInstanceVariable declared elsewhere",
                        "properties": {
                          "@id": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "@id"
                        ]
                      }
                    ]
                  },
                  "cdi:value": {
                    "type": "integer",
                    "description": "Index value (position) of the variable in the ordered key."
                  }
                },
                "required": [
                  "@type",
                  "cdi:indexes",
                  "cdi:value"
                ]
              },
              "minItems": 1
            }
          },
          "required": [
            "@type",
            "cdif:isComposedOf"
          ]
        },
        {
          "type": "object",
          "description": "object reference via URI or URI fragment to a cdif:Key defined elsewhere in the same document",
          "properties": {
            "@id": {
              "type": "string"
            }
          },
          "required": [
            "@id"
          ]
        }
      ],
      "description": "Primary key of the dataset: a cdif:Key whose cdif:isComposedOf is an ordered list of cdi:InstanceVariables (from schema:variableMeasured) that uniquely identify each data instance."
    },
    "cdif:statistics": {
      "type": "array",
      "description": "Summary statistics describing the dataset's values. Each entry is a cdi:Statistics bundle (one or more Statistic value objects, optionally weighted by an InstanceVariable, optionally broken down by Category) or a cdi:StatisticsCollection (groups multiple Statistics nodes and records which InstanceVariables they index). Inline node or @id-reference to one declared elsewhere in the document. cdif: namespaced — DDI-CDI has no `statistics` association from a dataset; this is a CDIF attachment property.",
      "items": {
        "anyOf": [
          {
            "title": "CDIF Statistics",
            "description": "CDIF profile of the DDI-CDI Statistics / CategoryStatistics / StatisticsCollection classes (2026-03 model). A Statistics node carries one or more Statistic value objects; CategoryStatistics carries per-category results; a StatisticsCollection groups Statistics nodes. The root validates any of the three. CDIF divergences from canonical DDI-CDI: properties valued by InternationalString / LabelForDisplay / ObjectName are simplified to plain strings and carried under the cdif: namespace (cdif:name, cdif:descriptiveText, cdif:definition, cdif:displayLabel); the polymorphic cdi:has association is split into target-specific cdif:has_* keys; cdif:appliesTo and cdif:indexedBy are CDIF additions (not present in the canonical model) that link statistics to the InstanceVariable(s) they describe.",
            "type": "object",
            "anyOf": [
              {
                "$ref": "#/$defs/Statistics"
              },
              {
                "$ref": "#/$defs/CategoryStatistics"
              },
              {
                "$ref": "#/$defs/StatisticsCollection"
              }
            ]
          },
          {
            "type": "object",
            "properties": {
              "@id": {
                "type": "string"
              }
            },
            "required": [
              "@id"
            ]
          }
        ]
      }
    },
    "schema:variableMeasured": {
      "type": "array",
      "items": {
        "allOf": [
          {
            "type": "object",
            "description": "All variableMeasured items at data description level must have an @id and cdif:physicalDataType so physical mappings can reference them.",
            "properties": {
              "@id": {
                "type": "string",
                "description": "URI identifier for this variable, used as the target of cdif:formats_InstanceVariable references in physical mappings."
              }
            },
            "required": [
              "@id"
            ]
          },
          {
            "$ref": "#/$defs/CdifInstanceVariable"
          },
          {
            "type": "object",
            "description": "At the Data Description profile level, InstanceVariables may also carry substantive and sentinel value domains directly (in profiles that introduce a RepresentedVariable - e.g., CDIFDataStructureProfile - these properties live on the RepresentedVariable instead and are disallowed here).",
            "properties": {
              "cdi:takesSentinelValuesFrom": {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "object",
                      "description": "Value domain for a sentinel conceptual domain.",
                      "properties": {
                        "@type": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "contains": {
                            "const": "cdif:SentinelValueDomain"
                          },
                          "minItems": 1
                        },
                        "@id": {
                          "type": "string",
                          "description": "Identifier for this SentinelValueDomain node"
                        },
                        "cdif:takesValuesFrom": {
                          "anyOf": [
                            {
                              "title": "CDIF Enumeration Domain",
                              "description": "A base class acting as an extension point to allow a codification vocabulary to be documented as enumerated value domain.",
                              "type": "object",
                              "properties": {
                                "@type": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  },
                                  "contains": {
                                    "const": "cdif:EnumerationDomain"
                                  },
                                  "minItems": 1
                                },
                                "@id": {
                                  "type": "string",
                                  "description": "Identifier for this EnumerationDomain node"
                                },
                                "cdif:identifier": {
                                  "$ref": "#/$defs/Identifier",
                                  "description": "Identifier for this enumerated (categorical) domain."
                                },
                                "schema:name": {
                                  "type": "string",
                                  "description": "Human understandable name (liguistic signifier, word, phrase, or mnemonic)."
                                },
                                "cdif:references": {
                                  "description": "SKOS concept scheme that contains concepts defining the allowed values of this enumeration domain.",
                                  "anyOf": [
                                    {
                                      "title": "SKOS Concept Scheme",
                                      "description": "JSON Schema for a SKOS ConceptScheme in JSON-LD form. Validates the root object as a skos:ConceptScheme with prefLabel, hasTopConcept, and nested skos:Concept items. References the skosConcept and skosCollection building blocks. Based on the W3C SKOS Reference (https://www.w3.org/TR/skos-reference/) and the SKOS RDF vocabulary (https://www.w3.org/2004/02/skos/core.rdf).",
                                      "type": "object",
                                      "properties": {
                                        "@context": {
                                          "description": "JSON-LD context declaring the skos namespace prefix and any additional prefixes used in concept URIs. May be a single object or an array of strings and objects.",
                                          "anyOf": [
                                            {
                                              "type": "object",
                                              "properties": {
                                                "skos": {
                                                  "const": "http://www.w3.org/2004/02/skos/core#"
                                                }
                                              },
                                              "required": [
                                                "skos"
                                              ]
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "type": "object"
                                                  }
                                                ]
                                              },
                                              "contains": {
                                                "type": "object",
                                                "properties": {
                                                  "skos": {
                                                    "const": "http://www.w3.org/2004/02/skos/core#"
                                                  }
                                                },
                                                "required": [
                                                  "skos"
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "@id": {
                                          "type": "string",
                                          "description": "URI identifier for this concept scheme."
                                        },
                                        "@type": {
                                          "type": "array",
                                          "items": {
                                            "type": "string"
                                          },
                                          "contains": {
                                            "const": "skos:ConceptScheme"
                                          },
                                          "minItems": 1
                                        },
                                        "skos:prefLabel": {
                                          "description": "Preferred lexical label for the concept scheme. A single string, a single language-tagged value, or an array of language-tagged values. Each language should appear at most once.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "$ref": "#/$defs/SkosConcept"
                                              }
                                            }
                                          ]
                                        },
                                        "skos:altLabel": {
                                          "description": "Alternative lexical labels (acronyms, abbreviations, spelling variants).",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:hiddenLabel": {
                                          "description": "Labels accessible to free-text search but not displayed.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:definition": {
                                          "description": "Formal explanation of the meaning or purpose of this concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:notation": {
                                          "description": "Classification code or notation for this concept scheme.",
                                          "type": "array",
                                          "items": {
                                            "type": "string"
                                          }
                                        },
                                        "skos:note": {
                                          "description": "General note about the concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:scopeNote": {
                                          "description": "Note clarifying the intended scope of the concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:historyNote": {
                                          "description": "Note about the history of the concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:changeNote": {
                                          "description": "Note documenting a change to the concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:editorialNote": {
                                          "description": "Note for editors, translators, and maintainers.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:example": {
                                          "description": "Example of the use of this concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "$ref": "#/$defs/SkosConcept"
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "skos:hasTopConcept": {
                                          "description": "Top-level concepts in this scheme. Each item is a skos:Concept (inline or @id reference).",
                                          "type": "array",
                                          "minItems": 1,
                                          "items": {
                                            "anyOf": [
                                              {
                                                "$ref": "#/$defs/SkosConcept"
                                              },
                                              {
                                                "type": "object",
                                                "properties": {
                                                  "@id": {
                                                    "type": "string",
                                                    "description": "URI reference to a concept defined elsewhere"
                                                  }
                                                },
                                                "required": [
                                                  "@id"
                                                ]
                                              }
                                            ]
                                          }
                                        },
                                        "dcterms:creator": {
                                          "description": "Agent(s) who created this concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "@id": {
                                                  "type": "string"
                                                },
                                                "schema:name": {
                                                  "type": "string"
                                                }
                                              }
                                            },
                                            {
                                              "type": "array",
                                              "items": {
                                                "anyOf": [
                                                  {
                                                    "type": "string"
                                                  },
                                                  {
                                                    "type": "object",
                                                    "properties": {
                                                      "@id": {
                                                        "type": "string"
                                                      },
                                                      "schema:name": {
                                                        "type": "string"
                                                      }
                                                    }
                                                  }
                                                ]
                                              }
                                            }
                                          ]
                                        },
                                        "dcterms:created": {
                                          "type": "string",
                                          "description": "Date the concept scheme was created (ISO 8601)."
                                        },
                                        "dcterms:modified": {
                                          "type": "string",
                                          "description": "Date the concept scheme was last modified (ISO 8601)."
                                        },
                                        "dcterms:title": {
                                          "description": "Title of the concept scheme (Dublin Core). Prefer skos:prefLabel for the SKOS label; dcterms:title may be used for additional metadata.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            }
                                          ]
                                        },
                                        "dcterms:description": {
                                          "description": "Description of the concept scheme (Dublin Core).",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            }
                                          ]
                                        },
                                        "dcterms:license": {
                                          "description": "License for the concept scheme.",
                                          "anyOf": [
                                            {
                                              "type": "string"
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "@id": {
                                                  "type": "string"
                                                }
                                              }
                                            }
                                          ]
                                        },
                                        "dcterms:rights": {
                                          "description": "Rights statement for the concept scheme.",
                                          "type": "string"
                                        },
                                        "schema:version": {
                                          "description": "Version identifier for the concept scheme.",
                                          "type": [
                                            "string",
                                            "number"
                                          ]
                                        }
                                      },
                                      "required": [
                                        "@type",
                                        "skos:prefLabel"
                                      ]
                                    },
                                    {
                                      "type": "object",
                                      "description": "object reference via URI or URI fragment referencing an @id in the same document",
                                      "properties": {
                                        "@id": {
                                          "type": "string"
                                        }
                                      }
                                    }
                                  ]
                                },
                                "cdif:purpose": {
                                  "type": "string",
                                  "description": "Intent or reason for the object/the description of the object."
                                }
                              },
                              "required": [
                                "@type",
                                "cdif:references"
                              ]
                            },
                            {
                              "type": "object",
                              "description": "JSON-LD @id reference to a node defined elsewhere in the graph",
                              "properties": {
                                "@id": {
                                  "type": "string",
                                  "description": "IRI or blank node identifier of the referenced node"
                                }
                              },
                              "required": [
                                "@id"
                              ]
                            }
                          ]
                        },
                        "cdif:displayLabel": {
                          "type": "string",
                          "description": "A human-readable display label for the object. Supports the use of multiple languages. Repeat for labels with different content, for example, labels with differing length limitations."
                        },
                        "cdif:recommendedDataType": {
                          "type": "array",
                          "description": "The data types that are recommended for use with this domain.",
                          "items": {
                            "type": "string",
                            "enum": [
                              "xsd:anyURI",
                              "xsd:base64Binary",
                              "xsd:boolean",
                              "xsd:byte",
                              "xsd:date",
                              "xsd:dateTime",
                              "xsd:decimal",
                              "xsd:double",
                              "xsd:float",
                              "xsd:gDay",
                              "xsd:gMonth",
                              "xsd:gMonthDay",
                              "xsd:gYear",
                              "xsd:gYearMonth",
                              "xsd:hexBinary",
                              "xsd:int",
                              "xsd:integer",
                              "xsd:language",
                              "xsd:long",
                              "xsd:Name",
                              "xsd:NCName",
                              "xsd:NMTOKEN",
                              "xsd:negativeInteger",
                              "xsd:nonNegativeInteger",
                              "xsd:nonPositiveInteger",
                              "xsd:normalizedString",
                              "xsd:positiveInteger",
                              "xsd:short",
                              "xsd:string",
                              "xsd:time",
                              "xsd:token",
                              "xsd:unsignedByte",
                              "xsd:unsignedInt",
                              "xsd:unsignedLong",
                              "xsd:unsignedShort"
                            ]
                          },
                          "minItems": 1
                        }
                      },
                      "required": [
                        "@type"
                      ],
                      "anyOf": [
                        {
                          "required": [
                            "cdif:takesValuesFrom"
                          ]
                        },
                        {
                          "required": [
                            "cdif:recommendedDataType"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "object",
                      "properties": {
                        "@id": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "@id"
                      ]
                    }
                  ]
                },
                "description": "Sentinel (missing / not-applicable) value domain(s) for this variable (RepresentedVariable.takesSentinelValuesFrom)."
              },
              "cdi:takesSubstantiveValuesFrom": {
                "anyOf": [
                  {
                    "type": "object",
                    "description": "Value domain for a substantive conceptual domain. Typically a description and/or enumeration of allowed values of interest.",
                    "properties": {
                      "@type": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "contains": {
                          "const": "cdif:SubstantiveValueDomain"
                        },
                        "minItems": 1
                      },
                      "@id": {
                        "type": "string",
                        "description": "Identifier for this SubstantiveValueDomain node"
                      },
                      "cdif:takesValuesFrom": {
                        "anyOf": [
                          {
                            "title": "CDIF Enumeration Domain",
                            "description": "A base class acting as an extension point to allow a codification vocabulary to be documented as enumerated value domain.",
                            "type": "object",
                            "properties": {
                              "@type": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                },
                                "contains": {
                                  "const": "cdif:EnumerationDomain"
                                },
                                "minItems": 1
                              },
                              "@id": {
                                "type": "string",
                                "description": "Identifier for this EnumerationDomain node"
                              },
                              "cdif:identifier": {
                                "$ref": "#/$defs/Identifier",
                                "description": "Identifier for this enumerated (categorical) domain."
                              },
                              "schema:name": {
                                "type": "string",
                                "description": "Human understandable name (liguistic signifier, word, phrase, or mnemonic)."
                              },
                              "cdif:references": {
                                "description": "SKOS concept scheme that contains concepts defining the allowed values of this enumeration domain.",
                                "anyOf": [
                                  {
                                    "title": "SKOS Concept Scheme",
                                    "description": "JSON Schema for a SKOS ConceptScheme in JSON-LD form. Validates the root object as a skos:ConceptScheme with prefLabel, hasTopConcept, and nested skos:Concept items. References the skosConcept and skosCollection building blocks. Based on the W3C SKOS Reference (https://www.w3.org/TR/skos-reference/) and the SKOS RDF vocabulary (https://www.w3.org/2004/02/skos/core.rdf).",
                                    "type": "object",
                                    "properties": {
                                      "@context": {
                                        "description": "JSON-LD context declaring the skos namespace prefix and any additional prefixes used in concept URIs. May be a single object or an array of strings and objects.",
                                        "anyOf": [
                                          {
                                            "type": "object",
                                            "properties": {
                                              "skos": {
                                                "const": "http://www.w3.org/2004/02/skos/core#"
                                              }
                                            },
                                            "required": [
                                              "skos"
                                            ]
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "type": "object"
                                                }
                                              ]
                                            },
                                            "contains": {
                                              "type": "object",
                                              "properties": {
                                                "skos": {
                                                  "const": "http://www.w3.org/2004/02/skos/core#"
                                                }
                                              },
                                              "required": [
                                                "skos"
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "@id": {
                                        "type": "string",
                                        "description": "URI identifier for this concept scheme."
                                      },
                                      "@type": {
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        },
                                        "contains": {
                                          "const": "skos:ConceptScheme"
                                        },
                                        "minItems": 1
                                      },
                                      "skos:prefLabel": {
                                        "description": "Preferred lexical label for the concept scheme. A single string, a single language-tagged value, or an array of language-tagged values. Each language should appear at most once.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "$ref": "#/$defs/SkosConcept"
                                            }
                                          }
                                        ]
                                      },
                                      "skos:altLabel": {
                                        "description": "Alternative lexical labels (acronyms, abbreviations, spelling variants).",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:hiddenLabel": {
                                        "description": "Labels accessible to free-text search but not displayed.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:definition": {
                                        "description": "Formal explanation of the meaning or purpose of this concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:notation": {
                                        "description": "Classification code or notation for this concept scheme.",
                                        "type": "array",
                                        "items": {
                                          "type": "string"
                                        }
                                      },
                                      "skos:note": {
                                        "description": "General note about the concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:scopeNote": {
                                        "description": "Note clarifying the intended scope of the concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:historyNote": {
                                        "description": "Note about the history of the concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:changeNote": {
                                        "description": "Note documenting a change to the concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:editorialNote": {
                                        "description": "Note for editors, translators, and maintainers.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:example": {
                                        "description": "Example of the use of this concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "$ref": "#/$defs/SkosConcept"
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "skos:hasTopConcept": {
                                        "description": "Top-level concepts in this scheme. Each item is a skos:Concept (inline or @id reference).",
                                        "type": "array",
                                        "minItems": 1,
                                        "items": {
                                          "anyOf": [
                                            {
                                              "$ref": "#/$defs/SkosConcept"
                                            },
                                            {
                                              "type": "object",
                                              "properties": {
                                                "@id": {
                                                  "type": "string",
                                                  "description": "URI reference to a concept defined elsewhere"
                                                }
                                              },
                                              "required": [
                                                "@id"
                                              ]
                                            }
                                          ]
                                        }
                                      },
                                      "dcterms:creator": {
                                        "description": "Agent(s) who created this concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "@id": {
                                                "type": "string"
                                              },
                                              "schema:name": {
                                                "type": "string"
                                              }
                                            }
                                          },
                                          {
                                            "type": "array",
                                            "items": {
                                              "anyOf": [
                                                {
                                                  "type": "string"
                                                },
                                                {
                                                  "type": "object",
                                                  "properties": {
                                                    "@id": {
                                                      "type": "string"
                                                    },
                                                    "schema:name": {
                                                      "type": "string"
                                                    }
                                                  }
                                                }
                                              ]
                                            }
                                          }
                                        ]
                                      },
                                      "dcterms:created": {
                                        "type": "string",
                                        "description": "Date the concept scheme was created (ISO 8601)."
                                      },
                                      "dcterms:modified": {
                                        "type": "string",
                                        "description": "Date the concept scheme was last modified (ISO 8601)."
                                      },
                                      "dcterms:title": {
                                        "description": "Title of the concept scheme (Dublin Core). Prefer skos:prefLabel for the SKOS label; dcterms:title may be used for additional metadata.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          }
                                        ]
                                      },
                                      "dcterms:description": {
                                        "description": "Description of the concept scheme (Dublin Core).",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "$ref": "#/$defs/SkosConcept"
                                          }
                                        ]
                                      },
                                      "dcterms:license": {
                                        "description": "License for the concept scheme.",
                                        "anyOf": [
                                          {
                                            "type": "string"
                                          },
                                          {
                                            "type": "object",
                                            "properties": {
                                              "@id": {
                                                "type": "string"
                                              }
                                            }
                                          }
                                        ]
                                      },
                                      "dcterms:rights": {
                                        "description": "Rights statement for the concept scheme.",
                                        "type": "string"
                                      },
                                      "schema:version": {
                                        "description": "Version identifier for the concept scheme.",
                                        "type": [
                                          "string",
                                          "number"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "@type",
                                      "skos:prefLabel"
                                    ]
                                  },
                                  {
                                    "type": "object",
                                    "description": "object reference via URI or URI fragment referencing an @id in the same document",
                                    "properties": {
                                      "@id": {
                                        "type": "string"
                                      }
                                    }
                                  }
                                ]
                              },
                              "cdif:purpose": {
                                "type": "string",
                                "description": "Intent or reason for the object/the description of the object."
                              }
                            },
                            "required": [
                              "@type",
                              "cdif:references"
                            ]
                          },
                          {
                            "type": "object",
                            "description": "JSON-LD @id reference to a node defined elsewhere in the graph",
                            "properties": {
                              "@id": {
                                "type": "string",
                                "description": "IRI or blank node identifier of the referenced node"
                              }
                            },
                            "required": [
                              "@id"
                            ]
                          }
                        ]
                      },
                      "cdif:displayLabel": {
                        "type": "string",
                        "description": "A human-readable display label for the object. Supports the use of multiple languages. Repeat for labels with different content, for example, labels with differing length limitations."
                      },
                      "cdif:recommendedDataType": {
                        "type": "array",
                        "description": "The data types that are recommended for use with this domain.",
                        "items": {
                          "type": "string",
                          "enum": [
                            "xsd:anyURI",
                            "xsd:base64Binary",
                            "xsd:boolean",
                            "xsd:byte",
                            "xsd:date",
                            "xsd:dateTime",
                            "xsd:decimal",
                            "xsd:double",
                            "xsd:float",
                            "xsd:gDay",
                            "xsd:gMonth",
                            "xsd:gMonthDay",
                            "xsd:gYear",
                            "xsd:gYearMonth",
                            "xsd:hexBinary",
                            "xsd:int",
                            "xsd:integer",
                            "xsd:language",
                            "xsd:long",
                            "xsd:Name",
                            "xsd:NCName",
                            "xsd:NMTOKEN",
                            "xsd:negativeInteger",
                            "xsd:nonNegativeInteger",
                            "xsd:nonPositiveInteger",
                            "xsd:normalizedString",
                            "xsd:positiveInteger",
                            "xsd:short",
                            "xsd:string",
                            "xsd:time",
                            "xsd:token",
                            "xsd:unsignedByte",
                            "xsd:unsignedInt",
                            "xsd:unsignedLong",
                            "xsd:unsignedShort"
                          ]
                        },
                        "minItems": 1
                      }
                    },
                    "required": [
                      "@type"
                    ],
                    "anyOf": [
                      {
                        "required": [
                          "cdif:takesValuesFrom"
                        ]
                      },
                      {
                        "required": [
                          "cdif:recommendedDataType"
                        ]
                      }
                    ]
                  },
                  {
                    "type": "object",
                    "properties": {
                      "@id": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "@id"
                    ]
                  }
                ],
                "description": "The substantive value domain for this variable - the set of valid, meaningful values (RepresentedVariable.takesSubstantiveValuesFrom)."
              }
            }
          }
        ]
      }
    }
  },
  "allOf": [
    {
      "required": [
        "@id",
        "@type",
        "@context",
        "schema:name",
        "schema:identifier",
        "schema:dateModified",
        "schema:subjectOf"
      ]
    },
    {
      "anyOf": [
        {
          "required": [
            "schema:license"
          ]
        },
        {
          "required": [
            "schema:conditionsOfAccess"
          ]
        }
      ]
    },
    {
      "anyOf": [
        {
          "required": [
            "schema:url"
          ]
        },
        {
          "required": [
            "schema:distribution"
          ]
        }
      ]
    },
    {
      "required": [
        "schema:variableMeasured"
      ]
    },
    {
      "type": "object",
      "properties": {
        "@context": {
          "type": "object",
          "description": "Additional JSON-LD namespace prefixes for discovery and data description.",
          "properties": {
            "geosparql": {
              "const": "http://www.opengis.net/ont/geosparql#"
            },
            "dqv": {
              "const": "http://www.w3.org/ns/dqv#"
            },
            "cdi": {
              "const": "http://ddialliance.org/Specification/DDI-CDI/1.0/RDF/"
            }
          }
        },
        "schema:measurementTechnique": {
          "description": "The technique, technology, or methodology used for measurement or determination of the dataset values.",
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/DefinedTerm"
              }
            ]
          }
        },
        "schema:spatialCoverage": {
          "description": "Geographic extent of resource content.",
          "type": "array",
          "items": {
            "description": "Spatial Extent description for CDIF discovery profile.  Note required prefix declaration for geoSparql ( http://www.opengis.net/ont/geosparql#) and OGC simple features (sf: http://www.opengis.net/ont/sf#)",
            "type": "object",
            "properties": {
              "@type": {
                "default": "schema:Place",
                "type": "array",
                "items": {
                  "type": "string"
                },
                "contains": {
                  "const": "schema:Place"
                },
                "minItems": 1
              },
              "schema:additionalType": {
                "description": "Domain-specific type classifications for this place (e.g. facility type,laboratory classification, feature type).",
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "$ref": "#/$defs/DefinedTerm"
                    }
                  ]
                }
              },
              "schema:name": {
                "description": "A place name for the location, either as a string or a DefinedTerm from a gazetteer.",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/DefinedTerm"
                  }
                ]
              },
              "schema:identifier": {
                "description": "Formal identifier for this place (e.g. ROR identifier for a facility).",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/Identifier"
                  }
                ]
              },
              "schema:alternateName": {
                "description": "Alternate or abbreviated name(s) for this place.",
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "$ref": "#/$defs/DefinedTerm"
                    }
                  ]
                }
              },
              "schema:geo": {
                "description": "Either a bounding box or a point location.",
                "anyOf": [
                  {
                    "type": "object",
                    "description": "A point location. Point locations are recommended for data that is associated with specific sample locations, particularly if these are widely spaced such that an enclosing bounding box would be a misleading representation of the spatial location. Be aware that some client applications might only index or display bounding box extents or a single point location.",
                    "properties": {
                      "@type": {
                        "default": "schema:GeoCoordinates",
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "contains": {
                          "const": "schema:GeoCoordinates"
                        },
                        "minItems": 1
                      },
                      "schema:latitude": {
                        "type": "number",
                        "minimum": -90,
                        "maximum": 90
                      },
                      "schema:longitude": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      }
                    },
                    "required": [
                      "@type",
                      "schema:latitude",
                      "schema:longitude"
                    ]
                  },
                  {
                    "type": "object",
                    "description": "A schema:GeoShape bounding box. The geometry is described with a set of latitude/longitude pairs (in that order).The documentation for schema:GeoShape states 'Either whitespace or commas can be used to separate latitude and longitude; whitespace should be used when writing a list of several such points.'",
                    "properties": {
                      "@type": {
                        "default": "schema:GeoShape",
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "contains": {
                          "const": "schema:GeoShape"
                        },
                        "minItems": 1
                      },
                      "schema:box": {
                        "type": "string",
                        "description": "A GeoShape box defines an area on the surface of the earth defined by point locations of the southwest corner and northeast corner of the rectangle in latitude-longitude coordinates. A space should be used to separate the latitude and longitude values. The two corner coordinate points are separated by a space. 'East longitude' means positive longitude values are east of the prime (Greenwich) meridian."
                      }
                    },
                    "required": [
                      "@type",
                      "schema:box"
                    ]
                  },
                  {
                    "type": "object",
                    "description": "A schema:GeoShape curvilinear trace, for resource related to a linear trace like a ship track or airplane flight line",
                    "properties": {
                      "@type": {
                        "default": "schema:GeoShape",
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "contains": {
                          "const": "schema:GeoShape"
                        },
                        "minItems": 1
                      },
                      "schema:line": {
                        "type": "string",
                        "description": "A GeoShape box defines a curvilinear geometry as a string of latitude-longitude coordinates. A space should be used to separate the latitude and longitude values. The coordinate point pairs are also separated by a space. 'East longitude' means positive longitude values are east of the prime (Greenwich) meridian. e.g. '39.33 120.77 40.44 123.96 41.00 121.34' "
                      }
                    },
                    "required": [
                      "@type",
                      "schema:line"
                    ]
                  }
                ]
              },
              "geosparql:hasGeometry": {
                "type": "object",
                "description": "Optional geographic extent using wkt geometry, see Ocean InfoHub (https://book.oceaninfohub.org/thematics/spatial/README.html#simple-geosparql-wkt). Other geometry schemes might be specified in a specific domain profile, e.g. for atmospheric, subsurface data, or local coordinate systems. NOTE that the location specified here should be the same as the schema.org point or contained within the specified bounding box.",
                "properties": {
                  "@type": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "minItems": 1,
                    "description": "MUST be sf: (<http://www.opengis.net/ont/sf#>) SimpleFeature geometry type. See https://opengeospatial.github.io/ogc-geosparql/geosparql11/sf_geometries.ttl"
                  },
                  "geosparql:asWKT": {
                    "type": "object",
                    "properties": {
                      "@type": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "contains": {
                          "const": "geosparql:wktLiteral"
                        },
                        "minItems": 1
                      },
                      "@value": {
                        "type": "string",
                        "description": "a WKT geometry description string, e.g. 'POINT(-76 -18)'"
                      }
                    }
                  },
                  "geosparql:crs": {
                    "type": "object",
                    "properties": {
                      "@id": {
                        "type": "string",
                        "description": "identifier string for coordinate reference system, e.g., 'CRS84'"
                      }
                    }
                  }
                }
              }
            },
            "anyOf": [
              {
                "required": [
                  "schema:name"
                ]
              },
              {
                "required": [
                  "schema:identifier"
                ]
              },
              {
                "required": [
                  "schema:geo"
                ]
              },
              {
                "required": [
                  "geosparql:hasGeometry"
                ]
              }
            ]
          }
        },
        "schema:temporalCoverage": {
          "description": "Temporal extent of resource content.",
          "type": "array",
          "items": {
            "description": "The time interval during which data was collected or observations were made; or a time period that an activity or collection is linked to intellectually or thematically (for example, 1997 to 1998; the 18th century) (see https://documentation.ardc.edu.au/display/DOC/Temporal+coverage). For documentation of Earth Science, Paleobiology or Paleontology datasets, we are interested in the second case-- the time period that data are linked to thematically. NOTE-- context must include \"time\": \"http://www.w3.org/2006/time#\"}",
            "anyOf": [
              {
                "type": "object",
                "description": "a w3c time proper interval with bounds that are named time ordinal eras with identifier, e.g. geologic age. This is a SOSO schema.org extension",
                "properties": {
                  "@type": {
                    "default": "time:ProperInterval",
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "contains": {
                      "const": "time:ProperInterval"
                    },
                    "minItems": 1
                  },
                  "schema:description": {
                    "type": "string",
                    "description": "free text description of the temporal interval"
                  },
                  "time:intervalStartedBy": {
                    "type": "string",
                    "format": "uri",
                    "description": "identifier for a named time ordinal era that is older bound of time interval, e.g. 'isc:LowerDevonian' "
                  },
                  "time:intervalFinishedBy": {
                    "type": "string",
                    "format": "uri",
                    "description": "identifier for a named time ordinal era that is younger bound of time interval, e.g. 'isc:LowerDevonian' "
                  }
                },
                "anyOf": [
                  {
                    "required": [
                      "time:intervalStartedBy"
                    ]
                  },
                  {
                    "required": [
                      "time:intervalFinishedBy"
                    ]
                  }
                ]
              },
              {
                "type": "object",
                "description": "a w3c time proper interval with bounds that numeric ages.",
                "properties": {
                  "@context": {
                    "type": "object",
                    "properties": {
                      "time": {
                        "type": "string",
                        "const": "http://www.w3.org/2006/time#"
                      },
                      "schema": {
                        "type": "string",
                        "const": "http://schema.org/"
                      }
                    },
                    "required": [
                      "time",
                      "schema"
                    ],
                    "additionalProperties": true,
                    "description": "Must exactly match the specified @context object."
                  },
                  "@type": {
                    "default": "time:ProperInterval",
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "contains": {
                      "const": "time:ProperInterval"
                    },
                    "minItems": 1
                  },
                  "schema:description": {
                    "type": "string",
                    "description": "free text description of the temporal interval"
                  },
                  "time:hasBeginning": {
                    "type": "object",
                    "properties": {
                      "@type": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "contains": {
                          "const": "time:Instant"
                        },
                        "minItems": 1
                      },
                      "time:inTimePosition": {
                        "type": "object",
                        "properties": {
                          "@type": {
                            "default": "time:TimePosition",
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "contains": {
                              "const": "time:TimePosition"
                            },
                            "minItems": 1
                          },
                          "time:hasTRS": {
                            "type": "string",
                            "description": "identifier for a temporal reference system; default is million years before prsent as a decimal number",
                            "default": "http://www.opengis.net/def/crs/OGC/0/ChronometricGeologicTime"
                          },
                          "time:numericPosition": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "@type",
                          "time:hasTRS",
                          "time:numericPosition"
                        ]
                      }
                    }
                  },
                  "time:hasEnd": {
                    "type": "object",
                    "properties": {
                      "@type": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "contains": {
                          "const": "time:Instant"
                        },
                        "minItems": 1
                      },
                      "time:inTimePosition": {
                        "type": "object",
                        "properties": {
                          "@type": {
                            "default": "time:TimePosition",
                            "type": "array",
                            "items": {
                              "type": "string"
                            },
                            "contains": {
                              "const": "time:TimePosition"
                            },
                            "minItems": 1
                          },
                          "time:hasTRS": {
                            "type": "string",
                            "description": "identifier for a temporal reference system; default is million years before prsent as a decimal number",
                            "default": "http://www.opengis.net/def/crs/OGC/0/ChronometricGeologicTime"
                          },
                          "time:numericPosition": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "@type",
                          "time:hasTRS",
                          "time:numericPosition"
                        ]
                      }
                    }
                  }
                },
                "anyOf": [
                  {
                    "required": [
                      "time:hasBeginning"
                    ]
                  },
                  {
                    "required": [
                      "time:hasEnd"
                    ]
                  }
                ]
              },
              {
                "type": "string",
                "description": "Simple ISO8601 encoding of calendar date, dateTime, or time interval with calendar date bounds"
              }
            ]
          }
        },
        "dqv:hasQualityMeasurement": {
          "description": "Quality measurements reported to assess the resource.",
          "type": "array",
          "items": {
            "title": "definitions for simple quality measure property",
            "type": "object",
            "properties": {
              "@type": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "contains": {
                  "const": "dqv:QualityMeasurement"
                },
                "minItems": 1
              },
              "dqv:isMeasurementOf": {
                "description": "specify the quality measure that is reported, by name, with an ID ref, or as a Defined Term",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "@id": {
                        "type": "string",
                        "description": "a resolvable reference to a representation of a quality measure"
                      }
                    }
                  },
                  {
                    "$ref": "#/$defs/DefinedTerm"
                  }
                ]
              },
              "dqv:value": {
                "description": "the reported result of the quality measure, either as a string or a defined term from a vocabulary",
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/DefinedTerm"
                  }
                ]
              }
            },
            "required": [
              "dqv:isMeasurementOf",
              "dqv:value"
            ]
          }
        },
        "schema:subjectOf": {
          "properties": {
            "dcterms:conformsTo": {
              "contains": {
                "type": "object",
                "properties": {
                  "@id": {
                    "const": "https://w3id.org/cdif/data_description/1.0"
                  }
                }
              }
            }
          }
        }
      }
    }
  ],
  "$defs": {
    "Reference": {
      "type": "object",
      "description": "Building block to implement relations to other resources using a URL and some semantics.",
      "allOf": [
        {
          "description": "schema for a labeled link, a profile of schema.org/CreativeWork",
          "type": "object",
          "properties": {
            "@type": {
              "default": "schema:CreativeWork",
              "type": "array",
              "items": {
                "type": "string"
              },
              "contains": {
                "const": "schema:CreativeWork"
              },
              "minItems": 1
            },
            "schema:name": {
              "type": "string"
            },
            "schema:description": {
              "type": "string"
            },
            "schema:url": {
              "type": "string",
              "format": "uri"
            }
          },
          "required": [
            "@type",
            "schema:url"
          ]
        },
        {
          "type": "object",
          "description": "DCAT Relationship surface added on top of the schema.org labeled link construct.",
          "properties": {
            "@type": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "contains": {
                "const": "dcat:Relationship"
              },
              "minItems": 1
            },
            "dcat:hadRole": {
              "$ref": "#/$defs/SkosConcept",
              "description": "Role of the related resource as a SKOS Concept (DCAT canonical role slot)."
            },
            "dcterms:relation": {
              "type": "string",
              "format": "uri",
              "description": "URI of the related resource (DCAT canonical pointer to what is being related to; distinct from schema:url which is the presentation URL inherited from labeledLink)."
            }
          }
        }
      ]
    },
    "SkosConcept": {
      "title": "SKOS Concept",
      "description": "JSON Schema for a SKOS Concept in JSON-LD form. A unit of thought within a concept scheme. Supports labels (prefLabel, altLabel, hiddenLabel), notations, hierarchical relations (broader/narrower), associative relations (related), cross-scheme mapping properties, scheme membership, and documentary notes. Based on the W3C SKOS Reference (https://www.w3.org/TR/skos-reference/).",
      "type": "object",
      "properties": {
        "@context": {
          "description": "JSON-LD context declaring the skos namespace prefix. May be a single object or an array of strings and objects.",
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "skos": {
                  "const": "http://www.w3.org/2004/02/skos/core#"
                }
              },
              "required": [
                "skos"
              ]
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "object"
                  }
                ]
              },
              "contains": {
                "type": "object",
                "properties": {
                  "skos": {
                    "const": "http://www.w3.org/2004/02/skos/core#"
                  }
                },
                "required": [
                  "skos"
                ]
              }
            }
          ]
        },
        "@id": {
          "type": "string",
          "description": "URI identifier for this concept."
        },
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "skos:Concept"
          },
          "minItems": 1
        },
        "skos:prefLabel": {
          "description": "Preferred lexical label for this concept. A single string, a single language-tagged value, or an array of language-tagged values. Each language should appear at most once.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/LanguageTaggedValue"
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/LanguageTaggedValue"
              }
            }
          ]
        },
        "skos:notation": {
          "description": "Classification code for this concept within a scheme.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "skos:definition": {
          "description": "Formal explanation of the meaning of this concept.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/LanguageTaggedValue"
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/LanguageTaggedValue"
                  }
                ]
              }
            }
          ]
        },
        "skos:scopeNote": {
          "description": "Note clarifying meaning and/or intended use.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/LanguageTaggedValue"
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/LanguageTaggedValue"
                  }
                ]
              }
            }
          ]
        },
        "skos:note": {
          "description": "General note about this concept.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/LanguageTaggedValue"
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/LanguageTaggedValue"
                  }
                ]
              }
            }
          ]
        },
        "skos:historyNote": {
          "description": "Note about past state or use.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/LanguageTaggedValue"
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/LanguageTaggedValue"
                  }
                ]
              }
            }
          ]
        },
        "skos:changeNote": {
          "description": "Note documenting a change.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/LanguageTaggedValue"
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/LanguageTaggedValue"
                  }
                ]
              }
            }
          ]
        },
        "skos:editorialNote": {
          "description": "Note for editors and maintainers.",
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/LanguageTaggedValue"
            },
            {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/LanguageTaggedValue"
                  }
                ]
              }
            }
          ]
        },
        "skos:inScheme": {
          "description": "Concept scheme(s) this concept belongs to.",
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            },
            {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                },
                "required": [
                  "@id"
                ]
              }
            }
          ]
        },
        "skos:topConceptOf": {
          "description": "Concept scheme(s) for which this is a top concept.",
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            },
            {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                },
                "required": [
                  "@id"
                ]
              }
            }
          ]
        },
        "skos:broader": {
          "description": "Broader (parent) concepts in the hierarchy. Items are inline concept objects or @id references.",
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object",
                "description": "A reference to a SKOS Concept by URI.",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "URI of the referenced concept."
                  }
                },
                "required": [
                  "@id"
                ]
              },
              {
                "$comment": "circular-ref"
              }
            ]
          }
        },
        "skos:narrower": {
          "description": "Narrower (child) concepts in the hierarchy. Items are inline concept objects or @id references.",
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object",
                "description": "A reference to a SKOS Concept by URI.",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "URI of the referenced concept."
                  }
                },
                "required": [
                  "@id"
                ]
              },
              {
                "$comment": "circular-ref"
              }
            ]
          }
        }
      },
      "required": [
        "@type",
        "skos:prefLabel",
        "skos:definition",
        "skos:inScheme"
      ]
    },
    "Identifier": {
      "description": "Properties for a schema.org identifier (schema:PropertyValue pattern).\n\n**Union-type policy:** In CDIF profile UML models an attribute typed as\nschema:Identifier / schema:PropertyValue is represented by a single attribute\nof that class type. The JSON Schema implementation permits the property value\nto be EITHER a plain string (interpreted as the bare identifier value) OR a\nfull schema:PropertyValue object (with explicit @type, propertyID, value).\nConsumers should accept either form.\n",
      "type": "object",
      "properties": {
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "schema:PropertyValue"
          },
          "minItems": 1
        },
        "schema:propertyID": {
          "type": "string",
          "description": "In this context for the schema:PropertyValue, this field is an identifier for the identifier schema, e.g. DOI, ARK.  Get values from https://registry.identifiers.org/registry/ for interoperability"
        },
        "schema:value": {
          "type": "string",
          "description": "the identifier string. E.g. 10.5066/F7VX0DMQ"
        },
        "schema:url": {
          "type": "string",
          "format": "uri",
          "description": "web-resolveable string for the identifier; host name part is location of a resolver that will return some representation for the given identifier value. E.g. https://doi.org/10.5066/F7VX0DMQ "
        }
      },
      "allOf": [
        {
          "required": [
            "@type"
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "schema:value"
              ]
            },
            {
              "required": [
                "schema:url"
              ]
            }
          ]
        }
      ]
    },
    "DefinedTerm": {
      "description": "schema.org Defined Term schema.\n\n**Union-type policy:** In CDIF profile UML models an attribute typed as\nschema:DefinedTerm is represented by a single attribute of that class type.\nThe JSON Schema implementation permits the property value to be EITHER a\nplain string (interpreted as schema:name or schema:termCode in the default\nvocabulary) OR a full schema:DefinedTerm object (with explicit @type, name,\nidentifier, termCode, inDefinedTermSet). Consumers should accept either form.\n\nNote that this differs from the cdif Concept policy: a Concept (skos:Concept)\nin CDIF profiles MUST be a controlled-vocabulary entry (object form or\n@id-reference) — plain strings are not permitted for Concept-typed values\nbecause vocabulary identity cannot be recovered from an unscoped label.\n",
      "type": "object",
      "properties": {
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "schema:DefinedTerm"
          },
          "minItems": 1
        },
        "schema:name": {
          "type": "string",
          "description": "text label for the term that is useful to human user"
        },
        "schema:identifier": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/Identifier"
            }
          ]
        },
        "schema:inDefinedTermSet": {
          "type": "string",
          "description": "Name for the controlled vocabulary responsible for this keyword."
        },
        "schema:termCode": {
          "type": "string",
          "description": "A representative code for this keyword in the controlled vocabulary. Analogous to skos:Notation"
        }
      },
      "allOf": [
        {
          "required": [
            "@type"
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "schema:name"
              ]
            },
            {
              "required": [
                "schema:identifier"
              ]
            },
            {
              "required": [
                "schema:termCode"
              ]
            }
          ]
        }
      ]
    },
    "Person": {
      "description": "schema for cdif profile of schema.org/Person",
      "type": "object",
      "properties": {
        "@id": {
          "type": "string"
        },
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "schema:Person"
          },
          "minItems": 1
        },
        "schema:name": {
          "type": "string",
          "description": "string label for person that is meaningful for human users, should format consistently. Recommend 'Family Name, Given name' format."
        },
        "schema:description": {
          "type": "string"
        },
        "schema:identifier": {
          "description": "identifier for person, recommend ORCID",
          "anyOf": [
            {
              "$ref": "#/$defs/Identifier"
            },
            {
              "type": "string"
            }
          ]
        },
        "schema:alternateName": {
          "type": "string",
          "description": "other labels by which the person might be known"
        },
        "schema:affiliation": {
          "$ref": "#/$defs/Organization",
          "description": "if affiliation is present, value must be a schema:Organization."
        },
        "schema:contactPoint": {
          "type": "object",
          "description": "restrict to email only. Schema.org allows telephone and postal contacts as well",
          "properties": {
            "@type": {
              "default": "schema:ContactPoint",
              "type": "array",
              "items": {
                "type": "string"
              },
              "contains": {
                "const": "schema:ContactPoint"
              },
              "minItems": 1
            },
            "schema:email": {
              "type": "string"
            }
          },
          "required": [
            "schema:email"
          ]
        },
        "schema:sameAs": {
          "type": "array",
          "description": "other identifiers for the person",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                }
              }
            ]
          }
        }
      },
      "allOf": [
        {
          "required": [
            "@type"
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "schema:name"
              ]
            },
            {
              "required": [
                "schema:identifier"
              ]
            }
          ]
        }
      ]
    },
    "Organization": {
      "type": "object",
      "properties": {
        "@id": {
          "type": "string"
        },
        "@type": {
          "default": "schema:Organization",
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "schema:Organization",
                  "schema:FundingAgency",
                  "schema:Consortium",
                  "schema:Corporation",
                  "schema:EducationalOrganization",
                  "schema:FundingScheme",
                  "schema:GovernmentOrganization",
                  "schema:NGO",
                  "schema:Project",
                  "schema:ResearchOrganization"
                ]
              }
            ]
          },
          "contains": {
            "const": "schema:Organization"
          },
          "minItems": 1
        },
        "schema:additionalType": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/DefinedTerm"
              },
              {
                "type": "string"
              }
            ]
          }
        },
        "schema:name": {
          "type": "string",
          "description": "string label for organization that is meaningful for human users"
        },
        "schema:alternateName": {
          "type": "string",
          "description": "other labels by which the organization might be known"
        },
        "schema:description": {
          "type": "string"
        },
        "schema:identifier": {
          "description": "identifier for organization",
          "anyOf": [
            {
              "$ref": "#/$defs/Identifier"
            },
            {
              "type": "string"
            }
          ]
        },
        "schema:sameAs": {
          "type": "array",
          "description": "other identifiers for the organization",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                }
              }
            ]
          }
        }
      },
      "allOf": [
        {
          "required": [
            "@type"
          ]
        },
        {
          "anyOf": [
            {
              "required": [
                "schema:name"
              ]
            },
            {
              "required": [
                "schema:identifier"
              ]
            }
          ]
        }
      ]
    },
    "CdifInstanceVariable": {
      "title": "CDIF Instance Variable",
      "type": "object",
      "properties": {
        "@type": {
          "type": "array",
          "description": "Must include both schema:PropertyValue and cdi:InstanceVariable. Additional types may be included.",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "cdi:InstanceVariable"
          }
        },
        "cdif:physicalDataType": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "reference to a skos concept for the data type"
                  }
                }
              },
              {
                "$ref": "#/$defs/CdifInstanceVariable_DefinedTerm"
              }
            ]
          },
          "description": "identifier or name for the data type concept."
        },
        "cdif:role": {
          "type": "string",
          "enum": [
            "UnitIdentifier",
            "Measure",
            "Attribute",
            "Dimension",
            "Descriptor",
            "ReferenceVariable"
          ],
          "description": "Specifies the role this variable plays in a data structure. UnitIdentifier names the unit a row describes; Measure holds observed/derived values; Attribute qualifies an observation; Dimension addresses a cell in a multi-dimensional cube; Descriptor names the variable that a Reference column records values for (long format); ReferenceVariable holds those recorded values."
        },
        "cdif:simpleUnitOfMeasure": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string",
                  "description": "reference to a skos concept for the data type"
                }
              }
            },
            {
              "$ref": "#/$defs/CdifInstanceVariable_DefinedTerm"
            }
          ]
        },
        "cdif:uses": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string",
                    "description": "reference to a skos concept for the property"
                  }
                }
              },
              {
                "$ref": "#/$defs/CdifInstanceVariable_DefinedTerm"
              }
            ]
          },
          "description": "Essentially the same as schema:propertyID. References to concepts that this variable measures or represents. When the dataset's distribution carries cdi:isStructuredBy (CDIF Data Structure profile), cdif:uses references the RepresentedVariable that supplies the represented-variable-level properties below, which are then NOT duplicated on the InstanceVariable."
        },
        "cdi:function": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                }
              },
              {
                "$ref": "#/$defs/CdifInstanceVariable_DefinedTerm"
              }
            ]
          },
          "description": "Immutable characteristic of the variable such as geographic designator, weight, temporal designation, etc. (InstanceVariable.function)."
        },
        "cdi:platformType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              }
            },
            {
              "$ref": "#/$defs/CdifInstanceVariable_DefinedTerm"
            }
          ],
          "description": "The application or technical system context in which the variable has been realized - typically a statistical processing package or processing environment (InstanceVariable.platformType)."
        },
        "cdi:source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              }
            }
          ],
          "description": "Reference capturing provenance information for this InstanceVariable (InstanceVariable.source)."
        },
        "cdif:isDescribedBy_StatisticsCollection": {
          "description": "The StatisticsCollection holding summary / category statistics for this InstanceVariable (InstanceVariable.isDescribedBy). cdif: namespaced and target-suffixed because the DDI-CDI isDescribedBy association is polymorphic.",
          "anyOf": [
            {
              "$ref": "#/$defs/StatisticsCollection"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            }
          ]
        },
        "cdi:hasIntendedDataType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              }
            },
            {
              "$ref": "#/$defs/CdifInstanceVariable_DefinedTerm"
            }
          ],
          "description": "The data type intended to be used by this variable, independent of its physical representation (RepresentedVariable.hasIntendedDataType)."
        },
        "cdi:describedUnitOfMeasure": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              }
            },
            {
              "$ref": "#/$defs/CdifInstanceVariable_DefinedTerm"
            }
          ],
          "description": "The unit in which the data values are measured, expressed as a controlled-vocabulary entry (RepresentedVariable.describedUnitOfMeasure). For a plain-string unit, use cdif:simpleUnitOfMeasure instead."
        },
        "cdi:qualifies": {
          "type": "object",
          "properties": {
            "@id": {
              "type": "string"
            }
          },
          "description": "reference to an instance variable defined for this dataset"
        }
      },
      "allOf": [
        {
          "required": [
            "@type"
          ]
        },
        {
          "description": "Schema.org PropertyValue-based variableMeasured. Defines properties for a measured variable in a dataset, typed as schema:PropertyValue.",
          "type": "object",
          "properties": {
            "@type": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "contains": {
                "const": "schema:PropertyValue"
              },
              "minItems": 1
            },
            "@id": {
              "type": "string"
            },
            "schema:name": {
              "type": "string",
              "description": "string label associated with the variable in the dataset serialization"
            },
            "schema:description": {
              "type": "string",
              "default": "missing"
            },
            "schema:alternateName": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "human intelligible name for variable that conveys semantics"
              }
            },
            "schema:measurementTechnique": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "@id": {
                      "type": "string",
                      "description": "reference to a skos concept"
                    }
                  }
                },
                {
                  "$ref": "#/$defs/DefinedTerm"
                }
              ],
              "description": "Text description or URI specifying how values for the variable were obtained."
            },
            "schema:propertyID": {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "@id": {
                        "type": "string"
                      }
                    }
                  },
                  {
                    "$ref": "#/$defs/DefinedTerm"
                  }
                ]
              },
              "description": "identifier or name for the property concept"
            },
            "schema:unitText": {
              "type": "string",
              "description": "unit of measurement as text"
            },
            "schema:unitCode": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object",
                  "properties": {
                    "@id": {
                      "type": "string"
                    }
                  }
                },
                {
                  "$ref": "#/$defs/DefinedTerm"
                }
              ],
              "description": "URI or code identifying the unit of measure"
            },
            "schema:minValue": {
              "type": "number",
              "description": "minimum numeric value in the dataset"
            },
            "schema:maxValue": {
              "type": "number",
              "description": "maximum numeric value in the dataset"
            },
            "schema:url": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri",
                  "description": "link to a web page useful for interpreting the variable"
                },
                {
                  "$ref": "#/$defs/Reference"
                }
              ]
            }
          },
          "required": [
            "@type",
            "schema:name"
          ]
        }
      ]
    },
    "LanguageTaggedValue": {
      "type": "object",
      "description": "An RDF literal value with a language tag, serialized as a JSON-LD value object.",
      "properties": {
        "@value": {
          "type": "string",
          "description": "The text content."
        },
        "@language": {
          "type": "string",
          "description": "BCP 47 language tag (e.g. en, fr, de)."
        }
      },
      "required": [
        "@value",
        "@language"
      ]
    },
    "CdifInstanceVariable_DefinedTerm": {
      "anyOf": [
        {
          "$ref": "#/$defs/DefinedTerm"
        },
        {
          "$ref": "#/$defs/SkosConcept"
        }
      ]
    },
    "StatisticsCollection": {
      "title": "StatisticsCollection",
      "description": "Groups one or more Statistics nodes for an instance variable. A typical use is a dataset-level collection holding row-count / mean / stddev Statistics for each measured variable.",
      "type": "object",
      "properties": {
        "@id": {
          "type": "string",
          "description": "Identifier for this StatisticsCollection node."
        },
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "cdi:StatisticsCollection"
          },
          "minItems": 1
        },
        "cdi:hasWeight": {
          "description": "The InstanceVariable whose values were used as weights (inline cdifInstanceVariable node or an @id-reference).",
          "anyOf": [
            {
              "$ref": "#/$defs/CdifInstanceVariable"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            }
          ]
        },
        "cdif:has_Statistics": {
          "type": "array",
          "description": "Statistics nodes carried by this collection (inline or @id-ref). cdif: namespaced and target-suffixed because the DDI-CDI cdi:has association is polymorphic.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Statistics"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                },
                "required": [
                  "@id"
                ]
              }
            ]
          },
          "minItems": 1
        },
        "cdif:indexedBy": {
          "type": "array",
          "description": "CDIF addition (not in canonical DDI-CDI): the InstanceVariable(s) the contained Statistics index — the collection-level coordinate space.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/CdifInstanceVariable"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                },
                "required": [
                  "@id"
                ]
              }
            ]
          },
          "minItems": 1
        }
      },
      "required": [
        "@type",
        "cdif:has_Statistics"
      ]
    },
    "Statistics": {
      "title": "Statistics",
      "description": "A named bundle of one or more Statistic value objects for an instance variable, optionally weighted, optionally broken down by Category.",
      "type": "object",
      "properties": {
        "@id": {
          "type": "string",
          "description": "Identifier for this Statistics node."
        },
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "cdi:Statistics"
          },
          "minItems": 1
        },
        "cdi:typeOfStatistic": {
          "title": "SKOS Concept (CDIF vocabulary-bound term reference)",
          "description": "Controlled-vocabulary entry naming the kind of statistic — e.g. mean, median, count, sum, stdDev.",
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            },
            {
              "$ref": "#/$defs/DefinedTerm"
            },
            {
              "$ref": "#/$defs/SkosConcept"
            }
          ]
        },
        "cdi:statistic": {
          "type": "array",
          "description": "Ordered list of Statistic value objects carried by this bundle. Order is significant — consumers MAY rely on array position.",
          "items": {
            "title": "Statistic",
            "description": "DDI-CDI Statistic dataType — a single computed value (mean, count, median, etc.). A value object with no identity; appears inline inside a cdi:statistic array.",
            "type": "object",
            "properties": {
              "cdi:computationBase": {
                "type": "string",
                "enum": [
                  "MissingOnly",
                  "Total",
                  "ValidOnly"
                ],
                "description": "The cases included in determining the statistic — Total (all cases, valid and missing), ValidOnly (valid values only), MissingOnly (invalid cases only)."
              },
              "cdi:content": {
                "type": "number",
                "description": "The value of the statistic expressed as a real number."
              },
              "cdi:isWeighted": {
                "type": "boolean",
                "default": false,
                "description": "True if the statistic was computed using a weighting variable."
              },
              "cdi:typeOfNumericValue": {
                "type": "string",
                "description": "The type of numeric value carried in cdi:content — decimal, float, or double."
              }
            }
          },
          "minItems": 1
        },
        "cdi:hasWeight": {
          "description": "The InstanceVariable whose values were used as weights when computing the Statistic entries (inline cdifInstanceVariable node or an @id-reference).",
          "anyOf": [
            {
              "$ref": "#/$defs/CdifInstanceVariable"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            }
          ]
        },
        "cdif:appliesTo": {
          "type": "array",
          "description": "CDIF addition (not in canonical DDI-CDI): the InstanceVariable(s) this Statistics bundle summarizes — the per-bundle \"what these numbers describe\" link. When a Statistics node sits inside a StatisticsCollection that indexes more than one variable, cdif:appliesTo disambiguates which variable each bundle describes.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/CdifInstanceVariable"
              },
              {
                "type": "object",
                "properties": {
                  "@id": {
                    "type": "string"
                  }
                },
                "required": [
                  "@id"
                ]
              }
            ]
          },
          "minItems": 1
        },
        "cdif:has_CategoryStatistics": {
          "type": "array",
          "description": "CategoryStatistics entries breaking this Statistics bundle down by Category. cdif: namespaced and target-suffixed because the DDI-CDI cdi:has association is polymorphic.",
          "items": {
            "$ref": "#/$defs/CategoryStatistics"
          }
        }
      },
      "required": [
        "@type",
        "cdi:statistic"
      ]
    },
    "CategoryStatistics": {
      "title": "CategoryStatistics",
      "description": "Statistics for a specific Category of an instance variable within a data set.",
      "type": "object",
      "properties": {
        "@id": {
          "type": "string",
          "description": "Identifier for this CategoryStatistics node."
        },
        "@type": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "contains": {
            "const": "cdi:CategoryStatistics"
          },
          "minItems": 1
        },
        "cdi:for": {
          "description": "The Category this CategoryStatistics is for (inline Category node or an @id-reference).",
          "anyOf": [
            {
              "title": "Category",
              "description": "Minimal Category shape used as a CategoryStatistics target. CDIF simplifies the DDI-CDI InternationalString / LabelForDisplay / ObjectName valued properties to plain strings carried under the cdif: namespace. A full CDIF treatment of categories lives in cdifEnumerationDomain / SKOS Concept.",
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                },
                "@type": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "contains": {
                    "const": "cdi:Category"
                  },
                  "minItems": 1
                },
                "cdif:name": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Human-understandable name(s). CDIF-simplified from DDI-CDI Category.name (ObjectName) to plain strings."
                },
                "cdif:descriptiveText": {
                  "type": "string",
                  "description": "Short natural-language account of the category. CDIF-simplified from DDI-CDI Category.descriptiveText (InternationalString)."
                },
                "cdif:definition": {
                  "type": "string",
                  "description": "Natural-language definition of the category. CDIF-simplified from DDI-CDI Category.definition (InternationalString)."
                },
                "cdif:displayLabel": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "Human-readable display label(s). CDIF-simplified from DDI-CDI Category.displayLabel (LabelForDisplay)."
                }
              }
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            }
          ]
        },
        "cdi:typeOfStatistic": {
          "title": "SKOS Concept (CDIF vocabulary-bound term reference)",
          "description": "Controlled-vocabulary entry naming the kind of statistic.",
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            },
            {
              "$ref": "#/$defs/DefinedTerm"
            },
            {
              "$ref": "#/$defs/SkosConcept"
            }
          ]
        },
        "cdi:statistic": {
          "type": "array",
          "description": "Per-category Statistic value objects.",
          "items": {
            "title": "Statistic",
            "description": "DDI-CDI Statistic dataType — a single computed value (mean, count, median, etc.). A value object with no identity; appears inline inside a cdi:statistic array.",
            "type": "object",
            "properties": {
              "cdi:computationBase": {
                "type": "string",
                "enum": [
                  "MissingOnly",
                  "Total",
                  "ValidOnly"
                ],
                "description": "The cases included in determining the statistic — Total (all cases, valid and missing), ValidOnly (valid values only), MissingOnly (invalid cases only)."
              },
              "cdi:content": {
                "type": "number",
                "description": "The value of the statistic expressed as a real number."
              },
              "cdi:isWeighted": {
                "type": "boolean",
                "default": false,
                "description": "True if the statistic was computed using a weighting variable."
              },
              "cdi:typeOfNumericValue": {
                "type": "string",
                "description": "The type of numeric value carried in cdi:content — decimal, float, or double."
              }
            }
          },
          "minItems": 1
        },
        "cdi:hasWeight": {
          "description": "The InstanceVariable whose values were used as weights (inline cdifInstanceVariable node or an @id-reference).",
          "anyOf": [
            {
              "$ref": "#/$defs/CdifInstanceVariable"
            },
            {
              "type": "object",
              "properties": {
                "@id": {
                  "type": "string"
                }
              },
              "required": [
                "@id"
              ]
            }
          ]
        }
      },
      "required": [
        "@type",
        "cdi:for",
        "cdi:statistic"
      ]
    }
  }
}
