{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "$extensionSchemas": ["https://data.nist.gov/od/dm/enhanced-json-schema/v0.1#"],
    "id": "https://data.nist.gov/od/dm/nerdm-schema/v0.4#",
    "rev": "wd1",
    "title": "The JSON Schema for the NIST Extended Resource Data model (NERDm)",
    "description": "A JSON Schema specfying the core NERDm classes",
    "definitions": {

        "Resource": {
            "description": "a resource (e.g. data collection, service, website or tool) that can participate in a data-driven application",
            "properties": {

                "title": {
                    "title": "Title",
                    "description": "Human-readable, descriptive name of the resource",
                    "notes": [
                        "Acronyms should be avoided"
                    ],
                    "type": "string",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Title",
                        "referenceProperty": "dc:title"
                    }
                },

                "version": {
                    "title": "Version",
                    "description": "a string indicating the version of the release of this resource",
                    "type": "string",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Version",
                        "referenceProperty": "schema:version"
                    }
                },

                "versionHistory": {
                    "title": "History",
                    "description": "a list describing the release of different versions of this resource",
                    "type": "array",
                    "items": { "$ref": "#/definitions/VersionRelease" }
                },

                "replaces": {
                    "title": "Replaces",
                    "description": "a listing of other existing resources that are deprecated by this resource",
                    "type": "array",
                    "items": {
                        "allOf": [
                            { "$ref": "#/definitions/RelatedResource" },
                            { "required": [ "@id", "proxyFor", "label", "issued" ] }
                        ]
                    },
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Replaces",
                        "referenceProperty": "dc:replaces"
                    }
                },

                "isReplacedBy": {
                    "title": "Replaced by",
                    "description": "another existing resources that should be considered a replacement for this resource",
                    "notes": [
                        "This typically refers to a newer version of this resource",
                        "In the PDR system, this value is automatically generated given the overall state of the PDR's catalog"
                    ],
                    "allOf": [
                        { "$ref": "#/definitions/RelatedResource" },
                        { "required": [ "@id", "proxyFor", "label", "issued" ] }
                    ],
                    
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Is replaced by",
                        "referenceProperty": "dc:isReplacedBy"
                    }
                },

                "description": {
                    "title": "Description",                    
                    "description": "Human-readable description (e.g., an abstract) of the resource",
                    "notes": [
                        "Each element in the array should be considered a separate paragraph"
                    ],
                    "type": "array",
                    "items": { "type": "string" },
                    "minItems": 1,
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Description",
                        "referenceProperty": "dc:description"
                    }
                },

                "keyword": {
                    "title": "Tags",
                    "description": "Tags (or keywords) help users discover your dataset; please include terms that would be used by technical and non-technical users.",
                    "notes": [
                        "Surround each keyword with quotes. Separate keywords with commas. Avoid duplicate keywords in the same record."
                    ],
                    "type": "array",
                    "items": { "type": "string", "minLength": 1 },
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Tags",
                        "referenceProperty": "dcat:keyword"
                    }
                },

                "topic": {
                    "description": "Identified tags referring to things or concepts that this resource addresses or speaks to",
                    "type": "array",
                    "items": { "$ref": "#/definitions/Topic" },
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Topic",
                        "referenceProperty": "foaf:topic"
                    }
                },

                "modified": {
                    "description": "Most recent date on which the dataset was changed, updated or modified.",
                    "notes": [
                        "Dates should be ISO 8601 of highest resolution. In other words, as much of YYYY-MM-DDThh:mm:ss.sTZD as is relevant to this dataset. If there is a need to reflect that the dataset is continually updated, ISO 8601 formatting can account for this with repeating intervals. For instance, R/P1D for daily, R/P2W for every two weeks, and R/PT5M for every five minutes."
                    ],
                    "$ref": "#/definitions/ISO8601DateRange",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Last Update",
                        "referenceProperty": "dc:modified"
                    }
                },

                "issued": {
                    "title": "Release Date",
                    "description": "Date of formal issuance of the resource",
                    "$ref": "#/definitions/FlexibleDate",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Release Date",
                        "referenceProperty": "dc:issued",
                        "range": "xsd:date"
                    }
                },
                
                "publisher": {
                    "description": "The publishing entity and optionally their parent organization(s).",
                    "notes": [
                        "This is a container for a publisher object which groups together the fields: name and subOrganization. The subOrganization field can also contain a publisher object which allows one to describe an organization's hierarchy. Where greater specificity is desired, include as many levels of publisher as is useful, in ascending order, using the below format."
                    ],
                    "$ref": "#/definitions/Organization",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Publisher",
                        "referenceProperty": "dc:publisher"
                    }
                },

                "contactPoint": {
                    "description": "Contact information for getting more information about this resource",
                    "notes": [
                        "This should include at least a name and an email address",
                        "The information can reflect either a person or a group (such as a help desk)"
                    ],
                    "$ref": "#/definitions/ContactInfo",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Contact Information",
                        "referenceProperty": "dcat:contactPoint"
                    }
                },
                
                "accessLevel": {
                    "title": "Public Access Level",
                    "description": "The degree to which this dataset could be made publicly-available, regardless of whether it has been made available",
                    "notes": [
                    ],
                    "type": "string",
                    "enum": [ "public", "restricted public", "non-public" ],
                    "valueDocumentation": {
                        "public": {
                            "description": "Data asset is or could be made publicly available to all without restrictions"
                        },
                        "restricted public": {
                            "description": "Data asset is available under certain use restrictions"
                        },
                        "non-public": {
                            "description": "Data asset is not available to members of the public"
                        }
                    },
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Public Access Level",
                        "referenceProperty": "pod:accessLevel"
                    }
                },

                "license": {
                    "title": "License",
                    "description": "A pointer to the primary license or non-license (i.e. Public Domain) statement with which the dataset or API has been published",
                    "notes": [
                        "Software and data developed primarily by federal employees must be considered in the public domain; software primarily developed by contract can be assigned a license, including an open source license.",
                        "By default, NIST-produced data and software should point to http://www.nist.gov/data/license.cfm",
                        "See Open Licenses (https://project-open-data.cio.gov/open-licenses/) for more information."
                    ],
                    "anyOf": [
                        {
                            "type": "string",
                            "format": "uri"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "License",
                        "referenceProperty": "dc:license"
                    }
                },

                "rights": { 
                    "title": "Rights",
                    "description": "information regarding access or restrictions based on privacy, security, or other policies",
                    "notes": [
                        "This should also provide an explanation for the selected \"accessLevel\" including instructions for how to access a restricted file, if applicable, or explanation for why a \"non-public\" or \"restricted public\" data assetis not \"public,\" if applicable.",
                        "Text must be 255 or fewer characters."
                    ],
                    "anyOf": [
                        {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 255
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Rights",
                        "referenceProperty": "dc:rights"
                    }
                },

                "inventory": {
                    "description": "a summary of the components that are associated with this resource",
                    "notes": [
                        "This property is an aid for processing resources with a large number of components.  This summary allows the actual components content to be missing or incomplete in a trasmitted version of the record."
                    ],
                    "$ref": "#/definitions/Inventory"
                },

                "components": {
                    "description": "a listing of the various component resources, tools, and distributions of this resource",
                    "notes": [
                        "Records for the resources referenced in this list should specify this resource in its isPartOf field.",
                        "The @type property will indicate which type of component it is.  The first value in the @type list should be considered the primary or most important classification.",
                        "If an item's @type includes dcat:Distribution, the item should be convertable to a distribution in the POD schema.",
                        "The order should be considered meaningful (at least for components of the same type).  The meaning or intention behind the order can depend on the type; however, generally, display of the components of a common type should preserve the order.  For clarity then, it is recommended that items of the same primary type should be grouped together in the list."
                    ],
                    "type": "array",
                    "items": { "$ref": "#/definitions/Component" },
                    "minLength": 1,
                    "uniqueItems": true
                },

                "conformsTo": {
                    "title": "Standard",
                    "description": "URI used to identify a standardized specification the resource conforms to",
                    "anyOf": [
                        {
                            "type": "string",
                            "format": "uri"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Data Standard",
                        "referenceProperty": "dc:conformsTo",
                        "owl:range": "xsd:anyURI"
                    }
                },
                
                "isPartOf": {
                    "title": "Collection",
                    "description": "The collection of which the dataset is a subset",
                    "$ref": "#/definitions/ResourceReference",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Collection",
                        "referenceProperty": "dc:isPartOf"
                    }
                },
                
                "language": {
                    "title": "Language",
                    "description": "The primary language used in the dataset",
                    "anyOf": [
                        {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "pattern": "^(((([A-Za-z]{2,3}(-([A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-([A-Za-z]{4}))?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-([0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(x(-[A-Za-z0-9]{1,8})+))?)|(x(-[A-Za-z0-9]{1,8})+)|((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)))$"
                            }
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Language",
                        "referenceProperty": "dc:language"
                    }
                },
                
                "landingPage": {
                    "title": "Homepage URL",
                    "description": "a URL to a human-friendly web page that represents the home or gateway to the resources that are part of this dataset.",
                    "anyOf": [
                        {
                            "type": "string",
                            "format": "uri"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Homepage URL",
                        "referenceProperty": "dcat:landingPage"
                    }
                },
                
                "references": {
                    "title": "Related Resources",
                    "description": "Related documents such as technical information about a dataset, developer documentation, etc.",
                    "type": "array",
                    "items": { "$ref": "#/definitions/BibliographicReference" },
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "References",
                        "referenceProperty": "dc:references"
                    }
                },
                
                "theme": {
                    "title": "Category",
                    "description": "Main thematic category of the dataset.",
                    "notes": [
                        "Could include ISO Topic Categories (http://www.isotopicmaps.org/)"
                    ],
                    "anyOf": [
                        {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "minLength": 1
                            },
                            "minItems": 1,
                            "uniqueItems": true
                        },
                        {
                            "type": "null"
                        }
                    ]
                },

                "@id": {
                    "description": "A (primary) unique identifier for the resource",
                    "notes": [
                        "It is expected that this field will contain a type of identifier that is of a uniform type across all resource descriptions in the system",
                        "This identifier should, by default, resolve to the metadata record (or some rendering of it) rather than to the resource itself (e.g. via its landing page)."
                    ],
                    "type": "string",
                    "minLength": 5,
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Unique Identifier",
                        "referenceProperty": "dc:identifier"
                    }
                },

                "doi": {
                    "description": "A Digital Object Identifier (DOI) in non-resolving form.",
                    "notes": [
                        "The DOI value should not have the resolver URI base, but should have the form 'doi:NNNNN/XXXXXX'",
                        "It is expected that this will primarily be Datacite DOIs"
                    ],
                    "type": "string",
                    "pattern": "^doi:[0-9]+\\.[0-9]+/.*$",
                    "minLength": 5,
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Unique Identifier",
                        "referenceProperty": "dc:identifier"
                    }
                },

                "ediid": {
                    "description": "the NIST EDI identifier assigned to the resource",
                    "type": "string",
                    "minLength": 5,
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "EDI Identifier",
                        "referenceProperty": "dc:identifier"
                    }
                },
                
                "abbrev": {
                    "description": "an abbreviated form of the resource's title",
                    "notes": [
                        "this can be used as a label for a compact display or text for a link to this resource",
                        "this may be helpful for discovery when an abbreviation is included in a free-text search"
                    ],
                    "type": "array",
                    "items": {
                        "type": "string",
                        "maxLength": 24
                    }
                },

                "@type": {
                    "description":  "the linked-data class types for this resource",
                    "notes": [
                        "The value must always be given as an array, even when only one type is provided.",
                        "Multiple values indicate that the Resource can be considered of multiple types",
                        "If this resource is not to be considered a subtype of the nrd:Resource, its value should be 'nrd:Resource'."
                        
                    ],
                    "type": "array",
                    "items": { "type": "string" } 
                }

            },

            "required": [
                "title", "description", "landingPage", "publisher", 
                "contactPoint", "accessLevel"
            ]
        },

        "FlexibleDate": {
            "description": "a flexible format for a resource-related date",
            "anyOf": [
                {
                    "type": "string",
                    "pattern": "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$"
                },
                {
                    "type": "null"
                }
            ]
        },

        "RelatedResource": {
            "description": "a resource that is related in some way to this resource",
            "notes": [
                "This serves as a base type for various kinds of references."
            ],
            "type": "object",

            "properties": {
                "@id": {
                    "description": "an identifier for the reference",
                    "notes": [
                        "The most well-known PID used to identify the resource (see also notes for proxyFor",
                        "This identifier can be a relative URL which can be used in special cases (See the notes for BibliographicReference:@type for when this ID should not refer to the referenced work).",
                        "Though not required by this schema, providing an identifier for a component is critical for merging information from different sources.",
                        "A relative identifier requires that @base be set to the Resource identifier in the @context."
                    ],
                    "type": "string"
                },
                "@type": {
                    "anyOf": [
                        {
                            "type": "string",
                            "enum": [
                                "deo:BibliographicReference",
                                "org:Organization"
                            ]
                        },
                        {
                            "type": "array",
                            "items": { "type": "string"  }
                        }
                    ],
                    "notes": [
                        "The single string value option is provided for backward compatibility (and may be removed in future versions; see BibliographicReference).  When this is used, the node represents a reference and not the thing being referenced; the @id contains a relative URI, representing this reference"
                    ]
                },

                
                "title": {
                    "description": "the name of the resource being referenced",
                    "notes": [
                        "This value is intended for display.",
                        "This can be, but is not required to be, the same title given in the metadata record describing the resource"
                    ],
                    "type": "string",
                    "minLength": 1
                },
                "proxyFor": {
                    "description": "a local identifier representing this resource",
                    "notes": [
                        "This identifier is expected to point to an up-to-date description of the resource as known to the local system.  The properties associated with that identifier may be different those given in the current record."
                    ],
                    "type": "string",
                    "format": "uri",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Current Person Information",
                        "referenceProperty": "ore:proxyFor"
                    }
                },
                "location": {
                    "description": "the URL for accessing the resource",
                    "type": "string",
                    "format": "uri"
                },

                "label": {
                    "description": "a recommended label or title to display as the text for a link to the document",
                    "notes": [
                        "This is intended to be briefer than a citation.  It should be short enough to use as tag to an entry in reference list as inserted into a document's text"
                    ],
                    "type": "string"
                },

                "issued": {
                    "description": "The date the referenced resource was issued",
                    "notes": [
                        "This is intended for determining relative newness--i.e. being newer or older than the referring resource."
                    ],
                    "$ref": "#/definitions/FlexibleDate"
                },

                "description": {
                    "description": "a brief, human-readable description of what this reference refers to and/or why it is being referenced.",
                    "type": "string"
                }

            },

            "dependencies": {
                "proxyFor": {
                    "required": [ "@type" ]
                }
            }            
        },

        "ResourceReference": {
            "description":  "a reference to another resource that may have an associated ID",
            "notes": [
                "While providing a resType property is recommended, it is required if the proxyFor ID is given."
            ],
            "allOf": [
                { "$ref": "#/definitions/RelatedResource" },
                {
                    "required": [ "title" ]
                }
            ]
        },

        "VersionRelease": {
            "description": "notes about a versioned release of the resource",
            "allOf": [
                { "$ref": "#/definitions/RelatedResource" },
                {
                    "properties": {
                        "version": {
                            "title": "Version",
                            "description": "a string indicating a version of the release of this resource",
                            "notes": [
                                "label could contain the same value"
                            ],
                            "type": "string",
                            "asOntology": {
                                "@context": "profile-schema-onto.json",
                                "prefLabel": "Version",
                                "referenceProperty": "schema:version"
                            }
                        }
                    },
                    "required": [ "version", "issued" ]
                }
            ]
        },

        "BibliographicReference": {
            "description": "a reference to a creative work that provides information or data that is important to this resource.",
            "notes": [
                "Recognized @type list values include:",
                "npg:Document -- a work that is primarily meant to be human readable and could appropriately be identified with a CrossRef DOI",
                "npg:Dataset -- a reference that could appropriately be identified with a DataCite DOI",
                "npg:Article -- a work that is published in a book, journal, or other periodical",
                "schema:Book -- a book, typically physically-bound.",
                "deo:BibliographicReference -- a generic citable reference.  This is considered a superclass of all reference types and the default type when the specific type cannot be determined.",
                "npg:Document and npg:Dataset should be considered mutually exclusive and should not appear in the same list.  npg:Article and schema:Book should be considered subclasses of npg:document"
            ],
            "allOf": [
                { "$ref": "#/definitions/RelatedResource" },
                {
                    "properties": {
                        "citation": {
                            "description": "a full formated citation string for the reference, appropriate for inclusion in a bibliography",
                            "type": "string",
                            "asOntology": {
                                "@conxtext": "profile-schema-onto.json",
                                "prefLabel": "Cite as",
                                "referenceProperty": "dc:bibliographicCitation"
                            }
                        },
                        "refType": {
                            "description": "the type of relationship that this document has with the resource",
                            "notes": [
                                "This is equivalent to the Datacite relationType in that the term is a predicate that connects the resource as the subject to the referenced document as the object (e.g. resource IsDocumentedBy referenced-doc)",
                                "The DCiteReference type from Bibliographic extension sets DataCite terms as controlled vocabulary"
                            ],
                            "type": "string"
                        }
                    },
                    "required": [ "@type", "location" ]
                }
            ]
        },

        "Inventory": {
            "description": "an inventory summary of the components that are part of a Resource",
            "type": "array",
            "minItems": 1,
            "items": { "$ref": "#/definitions/CollectionInventory" }
        },

        "TypeInventory": {
            "description": "a count of the number of components of a given type",
            "notes": [
                "This type is intended for use in the context of a (named) collection of components wihtin a hierarchy of components.  In the property documentation, the 'current collection' refers to that context."
            ],
            "type": "object",
            "properties": {
                "forType": {
                    "description": "the type of component",
                    "notes": [
                        "This should be an abbreviated URI as used for @type values"
                    ],
                    "type": "string"
                },
                "childCount": {
                    "description": "the number of components of this type that are a direct child of the current collection",
                    "type": "integer"
                },
                "descCount": {
                    "description": "the number of components of this type that are anywhere below the current collection",
                    "type": "integer"
                },
                "label": {
                    "description": "a recommended label for the type and count",
                    "type": "string"
                }
            },
            "required": [ "forType", "descCount" ]
        },

        "CollectionInventory": {
            "description": "an inventory that breaks down numbers by the hierarchical collection, where this type describes a node in the hierarchy",
            "notes": [
                "The idea here is to provide numbers for each subdirectory"
            ],
            "type": "object",
            "properties": {
                "forCollection": {
                    "description": "the name of the collection that this inventory applies to",
                    "notes": [
                        "This is intended to be a /-delimited name that reflects the position of the subcollection in the hierarchy, as given in the Subcollection filepath field of the collection component.",
                        "The root collection should be refered to with an empty string"
                    ],
                    "type": "string"
                },
                "childCount": {
                    "description": "the number of relevent components that are a direct child of the collection",
                    "type": "integer"
                },
                "descCount": {
                    "description": "the number of relevent components that are anywhere below the collection",
                    "type": "integer"
                },
                "byType": {
                    "description": "a breakdown of the inventory of components in this collection by type",
                    "type": "array",
                    "items": { "$ref": "#/definitions/TypeInventory" }
                },
                "childCollections": {
                    "description": "an array listing the names of the subcollections that are direct children of the collection",
                    "notes": [
                        "Each name should be the full filepath value that refleces the position of the subcollection in the hierarchy, relative to the root, as given in the Subcollection filepath field of the collection component.  This makes it possible to select the subcollection's inventory (via forCollection) or its Subcollection component (via filepath)",
                        "The order of the listing should be considered significant"
                    ],
                    "type": "array",
                    "items": { "type": "string" }
                }
            },
            "required": [ "forCollection" ]
        },

        "Component": {
            "description": "a description of a component of a resource",
            "type": "object",
            "notes": [
                "Include a $extensionSchema property to validate this description against a Component sub-type"
            ],
            "properties": {
                "@id": {
                    "description": "a (relative) identifier for the distribution",
                    "notes": [
                        "Though not required by this schema, providing an identifier for a component is critical for merging information from different sources.",
                        "A relative identifier requires that @base be set to the Resource identifier in the @context."
                    ],
                    "type": "string"
                },
                "@type": {
                    "description": "the types of components that this component can be classified as",
                    "notes": [
                        "the first value should be considered its primary type.  This is usually a subtype of Component."
                    ],
                    "type": "array",
                    "items": { "type": "string" }
                },
                "title": {
                    "description": "a descriptive title for the component",
                    "type": "string"
                },
                "description": {
                    "description": "a description of the nature and contents of the component, including the role it plays as part of the resource",
                    "type": "string"
                },
                "topic": {
                    "description": "Identified tags referring to things or concepts that this component addresses or speaks to",
                    "type": "array",
                    "items": { "$ref": "#/definitions/Topic" },
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Topic",
                        "referenceProperty": "foaf:topic"
                    }
                },
                "conformsTo": {
                    "title": "Standard",
                    "description": "URI used to identify a standardized specification the component conforms to",
                    "anyOf": [
                        {
                            "type": "string",
                            "format": "uri"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Data Standard",
                        "referenceProperty": "dc:conformsTo"
                    }
                }
                
            }
        },

        "IncludedResource": {
            "description": "A reference to another resource (which has its own record) that is a part of this resource",
            "notes": [
                "Include 'nrd:IncludedResource' as a value to @type",
                "The title should be (but is not required to be) the title provided in the included resource's metadata record."
            ],
            "allOf": [
                { "$ref": "#/definitions/Component" },
                { "$ref": "#/definitions/ResourceReference" },
                {
                    "properties": {
                        "@id": {
                            "description": "a relative identifier for this component",
                            "notes": [
                                "@id should be the ID for the included resource as a component of this resource; use the required proxyFor property to give the native ID of the included resource."
                            ]
                        },
                        "resourceType": {
                            "description":  "the linked-data class types for the included resource",
                            "notes": [
                                "The @type should contain values that are subclasses of Component; resourceType is provided to list the Resource types for the included resource.",
                                "Just like a Resource:@type, the value must always be given as an array, even when only one type is provided.",
                                "Multiple values indicate that the Resource can be considered of multiple types",
                                "If this resource is not to be considered a subtype of the nrd:Resource, its value should be 'nrd:Resource'."
                            ],
                            "type": "array",
                            "items": { "type": "string" } 
                        }
                    },
                    "required": [ "proxyFor", "resourceType" ]
                }
            ]
        },

        "ISO8601DateRange": {
            "title": "Last Update",
            "description": "a single date-time or a date-time range",
            "anyOf": [
                {
                  "type": "string",
                  "pattern": "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$"
                },
                {
                  "type": "string",
                  "pattern": "^(R\\d*\\/)?P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$"
                },
                {
                  "type": "string",
                  "pattern": "^(R\\d*\\/)?([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\4([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\18[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?(\\/)P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$"
                }
            ]
        },

        "Topic": {
            "description": "a container for an identified concept term or proper thing",
            "notes": [
                "A concept term refers to a subject or keyword term, like 'magnetism' while a proper thing is a particular instance of a concept that has a name, like the planet 'Saturn' or the person called 'Abraham Lincoln'",
                "The meaning of concept is that given by the OWL ontology (owl:Concept); the meaning of thing is that given by the SKOS ontology (skos:Thing).  See also the FOAF ontology."
            ],
            "type": "object",
            "properties": {
                "@type": {
                    "description": "a label indicating whether the value refers to a concept or a thing",
                    "type": "string",
                    "enum": [ "Concept", "Thing" ],
                    "valueDocumentation": {
                        "Concept": {
                            "description": "label indicating that the value refers to a concept (as in owl:Concept)"
                        },
                        "Thing": {
                            "description": "label indicating that the value refers to a named person, place, or thing (as in skos:Thing)"
                        }
                    }
                },

                "scheme": {
                    "description": "a URI that identifies the controlled vocabulary, registry, or identifier system that the value is defined in.",
                    "type": "string",
                    "format": "uri",
                    "asOnotology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Schema",
                        "referenceProperty": "vold:vocabulary"
                    }
                },

                "@id": {
                    "description": "the unique identifier identifying the concept or thing",
                    "type": "string",
                    "format": "uri"
                },

                "tag": {
                    "description": "a short, display-able token that locally represents the concept or thing",
                    "notes": [
                        "As a token, it is intended that applications can search for this value and find all resources that are talking about the same thing.  Thus, regardless of whether the @id field is provided, all references to the same concept or thing should use the same tag value."
                    ],
                    "type": "string"
                }
            },
            "required": [ "@type", "tag" ]
        },

        "Organization": {
            "description": "a named organization that may be part of a larger organization",
            "type": "object",
            "properties": {
                "@type": {
                    "title": "Metadata Context",
                    "description": "IRI for the JSON-LD data type. This should be org:Organization for each publisher",
                    "type": "string",
                    "enum": [ "org:Organization" ]
                },
                "name": {
                    "title": "Publisher Name",
                    "description": "The plain-text name of the organization",
                    "type": "string",
                    "minLength": 1,
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "referenceProperty": "skos:prefLabel"
                    }
                },
                "subOrganizationOf": {
                    "description": "A parent organizational entity",
                    "$ref": "#/definitions/Organization",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "referenceProperty": "org:subOrganizationOf"
                    }
                }
            },
            "required": [ "name" ]
        },

        "ContactInfo": {
            "description": "Information describing various ways to contact an entity",
            "notes": [
            ],
            "properties": {
                "@type": {
                    "type": "string",
                    "enum": [ "vcard:Contact" ]
                },
                "fn": {
                    "title": "Contact Name",
                    "description": "full name of the contact person, role, or organization",
                    "type": "string",
                    "minLength": 1,
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Contact Name",
                        "referenceProperty": "vcard:fn"
                    }
                },
            
                "hasEmail": {
                    "title": "Email",
                    "description": "The email address of the resource contact",
                    "type": "string",
                    "pattern": "^[\\w\\_\\~\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=\\:.-]+@[\\w.-]+\\.[\\w.-]+?$",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Contact Email",
                        "referenceProperty": "vcard:hasEmail"
                    }
                },

                "postalAddress": {
                    "description": "the contact mailing address",
                    "notes": [
                    ],
                    "$ref": "#/definitions/PostalAddress",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Contact Address",
                        "referenceProperty": "vcard:hasAddress"
                    }
                },
                
                "phoneNumber": {
                    "description": "the contact telephone number",
                    "notes": [ "Complete international dialing codes should be given, e.g. '+1-410-338-1234'" ],
                    "type" : "string",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Contact Phone Number",
                        "referenceProperty": "vcard:hasTelephone"
                    }
                },
                
                "timezone": {
                    "description": "the time zone where the contact typically operates",
                    "type" : "string",
                    "pattern": "^[-+][0-9]{4}$",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Contact Address",
                        "referenceProperty": "transit:timezone"
                    }
                },
                
                "proxyFor": {
                    "description": "a local identifier representing this person",
                    "notes": [
                        "This identifier is expected to point to an up-to-date description of the person as known to the local system.  The properties associated with that identifier may be different those given in the current record."
                    ],
                    "type": "string",
                    "format": "uri",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Current Person Information",
                        "referenceProperty": "ore:proxyFor"
                    }
                }
                
            },
            "asOntology": {
                "@context": "profile-schema-onto.json",
                "@id": "pod:ContactPerson",
                "@type": "owl:Class",
                "prefLabel": "Contact Information",
                "referenceClass": "vcard:Contact"
            }

        },

        "PostalAddress": {
            "description": "a line-delimited listing of a postal address",
            "type": "array",
            "items": { "type": "string", "minLength": 1 },
            "asOntology": {
                "@context": "profile-schema-onto.json",
                "referenceProperty": "vcard:hasAddress"
            }
        },

        "Identifier": {
            "description":  "a complete description of an identifier, including the scheme that it adheres to",
            "title": "Identifier",
            "properties": {
                "scheme": {
                    "description": "a label indicating the system that the identifier adheres to",
                    "notes": [
                        "this label may imply a particular resolver to use"
                    ],
                    "type": "string",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Identifier System",
                        "referenceProperty": "mads:idScheme"
                    }
                },

                "value": {
                    "description": "the value of the identifier",
                    "notes": [
                        "if no scheme is provided, a URI form of the identifier should be given"
                    ],
                    "type": "string",
                    "asOntology": {
                        "@context": "profile-schema-onto.json",
                        "prefLabel": "Identifier System",
                        "referenceProperty": "mads:idValue"
                    }
                }

            },
            "required": [ "value" ],
            "asOntology": {
                "@context": "profile-schema-onto.json",
                "@id": "mads:Identifier",
                "@type": "owl:Class",
                "prefLabel": "Identifier information",
                "referenceClass": "mads:Identifier"
            }
        }
    },

    "$ref": "#/definitions/Resource"
}
