@prefix ADMS: <http://www.w3.org/ns/adms#> .
@prefix IAO: <http://purl.obolibrary.org/obo/IAO_> .
@prefix bibo: <http://purl.org/ontology/bibo/> .
@prefix dash: <http://datashapes.org/dash#> .
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix dlthings: <https://concepts.datalad.org/s/things/v1/> .
@prefix dltypes: <https://concepts.datalad.org/s/types/v1/> .
@prefix obo: <http://purl.obolibrary.org/obo/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pav: <http://purl.org/pav/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema1: <http://schema.org/> .
@prefix sio: <http://semanticscience.org/resource/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

xsd:hexBinary a rdfs:Datatype ;
    owl:equivalentClass [ a rdfs:Datatype ;
            owl:intersectionOf ( xsd:string [ a rdfs:Datatype ;
                        owl:onDatatype xsd:string ;
                        owl:withRestrictions ( [ xsd:pattern "^[a-fA-F0-9]+$" ] ) ] ) ] .

xsd:nonNegativeInteger a rdfs:Datatype ;
    owl:equivalentClass xsd:integer .

<https://concepts.datalad.org/s/things/v1.owl.ttl> a owl:Ontology ;
    rdfs:label "things-schema" ;
    dcterms:license "MIT" ;
    dcterms:title "Generic schema for an arbitrarily detailed description of \"things\"" ;
    bibo:status <http://publications.europa.eu/resource/authority/concept-status/CURRENT> ;
    pav:version "1.0.0" ;
    skos:definition """This schema provides a generic [`Thing`](Thing) concept as a basic building block.
Key concepts of this schema are that any `Thing`

- has a unique identifier ([`pid`](pid))
- can be mapped to arbitrary external schemas and terminologies to maximize
  semantic alignment with existing metadata ecosystems
  (see [`mappings`](mappings))
- can be further described by attributes ([`attributes`](attributes))
  and qualified relations to other "things"
  ([`characterized_by`](characterized_by)),
  without prescribing a particular vocabulary
- can be associated with a specialized schema class for enabling detailed
  validation and precise data transformations ([`schema_type`](schema_type))
  without limiting the general expressiveness to a fixed set of classes
  available this foundational schema.

More information on this schema is available on a [dedicated page](about).
Each class comes with dedicated examples that exemplify its use. A good
starting point are the [examples of the `Thing` class](Thing#examples).

Although this generic schema could be used directly, it is meant to be used
as a foundational building block for more targeted schemas. Therefore, the
schema does not define common slots like `name`, or `description`, and leaves
this to more targeted schemas to decide if such slots are needed, and how they
should be defined. The envisioned use and reuse of this schema is to import
it and built targeted derivatives of `Thing` and other classes provided here.
See the [PROV schema](/s/prov) for an example that is built on this schema.

This schema also incorporates the schema(s)

- [`types`](https://concepts.datalad.org/s/types/v1)

The schema definition is available as

- [JSON-LD context](../v1.context.jsonld)
- [LinkML YAML](../v1.yaml)
- [LinkML YAML (static/resolved)](../v1.static.yaml)
- [OWL TTL](../v1.owl.ttl)
- [SHACL TTL](../v1.shacl.ttl)

Upcoming changes to this schema may be available in an [(unreleased)
development version](../../things/unreleased).
""" .

dltypes:EmailAddress a rdfs:Datatype ;
    owl:equivalentClass [ a rdfs:Datatype ;
            owl:intersectionOf ( xsd:string [ a rdfs:Datatype ;
                        owl:onDatatype xsd:string ;
                        owl:withRestrictions ( [ xsd:pattern "(?:[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])" ] ) ] ) ] .

rdfs:Resource a rdfs:Datatype ;
    owl:equivalentClass xsd:anyURI .

dlthings:Annotation a owl:Class ;
    rdfs:label "Annotation" ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom xsd:string ;
            owl:onProperty dlthings:annotation_value ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:annotation_value ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:annotation_tag ],
        [ a owl:Restriction ;
            owl:allValuesFrom dlthings:Thing ;
            owl:onProperty dlthings:annotation_tag ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:annotation_tag ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:annotation_value ] ;
    skos:definition "A tag/value pair with the semantics of OWL Annotation." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:ValueSpecification a owl:Class ;
    rdfs:label "ValueSpecification" ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:value ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:value ],
        [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty dlthings:value ],
        dlthings:Thing,
        dlthings:ValueSpecificationMixin ;
    skos:definition "A `Thing` that is a value of some kind. This class can be used to describe an outcome of a measurement, a factual value or constant, or other qualitative or quantitative information with an associated identifier. If no identifier is available, an `AttributeSpecification` can be used within the context of an associated `Thing` (`attributes`)." ;
    skos:exactMatch obo:OBI_0001933 ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:ValueSpecificationMixin a owl:Class ;
    rdfs:label "ValueSpecificationMixin" ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:range ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:range ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:value ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:anyURI ;
            owl:onProperty dlthings:range ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:string ;
            owl:onProperty dlthings:value ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:value ] ;
    skos:definition "Mix-in for a (structured) value specification. Two slots are provided to define a (literal) value (`value`) and its type (`range`)." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:relations a owl:ObjectProperty,
        owl:SymmetricProperty ;
    rdfs:label "relations" ;
    dcterms:title "Relations" ;
    rdfs:domain dlthings:Thing ;
    rdfs:range dlthings:Thing ;
    skos:definition "Declares an unqualified relation of the subject `Thing` to another `Thing`. This schema slot is used to define related things inline. If such a definition is not needed. A qualified relationship can be declared directly using the `characterized_by` slot." ;
    skos:exactMatch dcterms:relation,
        dcat:relation ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:Statement a owl:Class ;
    rdfs:label "Statement" ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty dlthings:object ],
        [ a owl:Restriction ;
            owl:allValuesFrom dlthings:Property ;
            owl:onProperty dlthings:predicate ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:predicate ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:object ],
        [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty dlthings:predicate ],
        [ a owl:Restriction ;
            owl:allValuesFrom dlthings:Thing ;
            owl:onProperty dlthings:object ] ;
    skos:definition "An RDF statement that links a `predicate` (a `Property`) with an `object` (a `Thing`) to the subject to form a triple. A `Statement` is used to qualify a relation to a `Thing` referenced by its identifier. For specifying a qualified relation to an attribute that has no dedicated identifier, use an `AttributeSpecification`." ;
    skos:exactMatch rdf:Statement,
        dlthings:Statement ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:annotation_tag a owl:ObjectProperty ;
    rdfs:label "annotation_tag" ;
    rdfs:range dlthings:Thing ;
    skos:definition "A tag identifying an annotation." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:annotation_value a owl:DatatypeProperty ;
    rdfs:label "annotation_value" ;
    rdfs:range xsd:string ;
    skos:definition "The actual annotation." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:object a owl:ObjectProperty ;
    rdfs:label "object" ;
    skos:definition "Reference to a `Thing` within a `Statement`." ;
    skos:editorialNote "We do not declare a range here to be able to tighten the range in subclasses of class that need a particular range. This appears to be working around a linkml limitation." ;
    skos:exactMatch rdf:object ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:pid a owl:DatatypeProperty ;
    rdfs:label "pid" ;
    dcterms:title "Persistent identifier" ;
    rdfs:range xsd:anyURI ;
    skos:definition "Persistent and globally unique identifier of a `Thing`." ;
    skos:exactMatch dcterms:identifier,
        schema1:identifier,
        ADMS:identifier ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:range a owl:DatatypeProperty ;
    rdfs:label "range" ;
    rdfs:range xsd:anyURI ;
    skos:definition "Declares that the value of a `Thing` or `AttributeSpecification` are instances of a particular class." ;
    skos:exactMatch rdfs:range ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:AttributeSpecification a owl:Class ;
    rdfs:label "AttributeSpecification" ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom dlthings:Property ;
            owl:onProperty dlthings:predicate ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:predicate ],
        [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty dlthings:predicate ],
        dlthings:ThingMixin,
        dlthings:ValueSpecificationMixin ;
    skos:closeMatch dlthings:Thing ;
    skos:definition "An attribute is conceptually a thing, but it requires no dedicated identifier (`pid`). Instead, it is linked to a `Thing` via its `attributes` slot and declares a `predicate` on the nature of the relationship." ;
    skos:exactMatch sio:SIO_000614 ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:ThingMixin a owl:Class ;
    rdfs:label "ThingMixin" ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:broad_mappings ],
        [ a owl:Restriction ;
            owl:allValuesFrom dlthings:Statement ;
            owl:onProperty dlthings:characterized_by ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:anyURI ;
            owl:onProperty dlthings:close_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:narrow_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:exact_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:annotations ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:anyURI ;
            owl:onProperty dlthings:related_mappings ],
        [ a owl:Restriction ;
            owl:allValuesFrom dlthings:AttributeSpecification ;
            owl:onProperty dlthings:attributes ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:description ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:attributes ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:characterized_by ],
        [ a owl:Restriction ;
            owl:allValuesFrom rdfs:Resource ;
            owl:onProperty dltypes:schema_type ],
        [ a owl:Restriction ;
            owl:allValuesFrom dlthings:Annotation ;
            owl:onProperty dlthings:annotations ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dltypes:schema_type ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:anyURI ;
            owl:onProperty dlthings:narrow_mappings ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:string ;
            owl:onProperty dlthings:description ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:anyURI ;
            owl:onProperty dlthings:exact_mappings ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:anyURI ;
            owl:onProperty dlthings:broad_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:related_mappings ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dltypes:schema_type ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:close_mappings ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:description ] ;
    skos:definition "Mix-in with the common interface of `Thing` and `AttributeSpecification`. This interface enables type specifications (`rdf:type`) for things and attributes via a `type` designator slot to indicate specialized schema classes for validation where a slot's `range` is too generic. A thing or attribute can be further describe with statements on qualified relations to other things (`characterized_by`), or inline attributes (`attributes`). A set of `mappings` slots enables the alignment for arbitrary external schemas and terminologies." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:annotations a owl:ObjectProperty ;
    rdfs:label "annotations" ;
    dcterms:title "Annotations" ;
    rdfs:range dlthings:Annotation ;
    skos:definition "A record of properties of the metadata record on a subject, a collection of tag/text tuples with the semantics of OWL Annotation." ;
    skos:exactMatch obo:NCIT_C44272 ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:attributes a owl:ObjectProperty ;
    rdfs:label "attributes" ;
    dcterms:title "Attributes" ;
    rdfs:range dlthings:AttributeSpecification ;
    skos:definition "Declares a relation that associates a `Thing` (or another attribute) with an attribute, where an attribute is an intrinsic characteristic, such as a quality, capability, disposition, function, or is an externally derived attribute determined from some descriptor (e.g. a quantity, position, label/identifier). Technically, this declaration is done via an `AttributeSpecification` that combines a `predicate` with a value declaration and the attribute-related slots of a `Thing`. Importantly, such attributes are declared inline, because they do not have a unique identifier. If an identifier is available, a `Thing` declaration (see `relation`), and a qualification of that relationship via a `Statement` (see `characterized_by`) should be preferred." ;
    skos:exactMatch sio:SIO_000008 ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:broad_mappings a owl:DatatypeProperty ;
    rdfs:label "broad_mappings" ;
    dcterms:title "Broad mappings" ;
    rdfs:range xsd:anyURI ;
    rdfs:subPropertyOf dlthings:mappings ;
    skos:definition "A list of terms from different schemas or terminology systems that have broader meaning." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:characterized_by a owl:ObjectProperty ;
    rdfs:label "characterized_by" ;
    dcterms:title "Is characterized by" ;
    rdfs:range dlthings:Statement ;
    skos:definition "Qualifies relationships between a subject `Thing` and an object `Thing` with a `Statement` declaring a `predicate` on the nature of the relationship." ;
    skos:exactMatch obo:RO_0000053 ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:close_mappings a owl:DatatypeProperty ;
    rdfs:label "close_mappings" ;
    dcterms:title "Close mappings" ;
    rdfs:range xsd:anyURI ;
    rdfs:subPropertyOf dlthings:mappings ;
    skos:definition "A list of terms from different schemas or terminology systems that have close meaning." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:exact_mappings a owl:DatatypeProperty ;
    rdfs:label "exact_mappings" ;
    dcterms:title "Exact mappings" ;
    rdfs:range xsd:anyURI ;
    rdfs:subPropertyOf dlthings:mappings ;
    skos:definition "A list of terms from different schemas or terminology systems that have identical meaning." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:narrow_mappings a owl:DatatypeProperty ;
    rdfs:label "narrow_mappings" ;
    dcterms:title "Narrow mappings" ;
    rdfs:range xsd:anyURI ;
    rdfs:subPropertyOf dlthings:mappings ;
    skos:definition "A list of terms from different schemas or terminology systems that have narrower meaning." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:related_mappings a owl:DatatypeProperty ;
    rdfs:label "related_mappings" ;
    dcterms:title "Related mappings" ;
    rdfs:range xsd:anyURI ;
    rdfs:subPropertyOf dlthings:mappings ;
    skos:definition "A list of terms from different schemas or terminology systems that have related meaning." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:mappings a owl:DatatypeProperty ;
    rdfs:label "mappings" ;
    rdfs:range xsd:anyURI ;
    skos:definition "A list of terms from different schemas or terminology systems that have comparable meaning. These may include terms that are precisely equivalent, broader or narrower in meaning, or otherwise semantically related but not equivalent from a strict ontological perspective." ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:Property a owl:Class ;
    rdfs:label "Property" ;
    rdfs:subClassOf dlthings:Thing ;
    skos:definition "An RDF property, a `Thing` used to define a `predicate`, for example in a `Statement`." ;
    skos:exactMatch rdf:Property,
        dlthings:Property ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:description a owl:DatatypeProperty ;
    rdfs:label "description" ;
    dash:singleLine false ;
    dcterms:title "Description" ;
    rdfs:range xsd:string ;
    skos:broadMatch IAO:0000300 ;
    skos:definition "A free-text account of the subject." ;
    skos:exactMatch dcterms:description,
        rdfs:comment ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:predicate a owl:ObjectProperty ;
    rdfs:label "predicate" ;
    rdfs:range dlthings:Property ;
    skos:definition "Reference to a `Property` within a `Statement`." ;
    skos:exactMatch rdf:predicate ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dlthings:value a owl:DatatypeProperty ;
    rdfs:label "value" ;
    rdfs:range xsd:string ;
    skos:definition "Value that is a direct representation of a thing." ;
    skos:exactMatch rdf:value ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

dltypes:schema_type a owl:DatatypeProperty ;
    rdfs:label "schema_type" ;
    rdfs:range rdfs:Resource ;
    skos:definition "State that the subject is an instance of a particular schema class. Typically, no explicit value needs to be assigned to this slot, because it matches the class type of a particular record. However, this slots can be used as a type designator of a schema element for validation and schema structure handling purposes. This is used to indicate specialized schema classes for properties that accept a hierarchy of classes as their range." ;
    skos:exactMatch dcterms:type ;
    skos:inScheme <https://concepts.datalad.org/s/types/v1> .

dlthings:Thing a owl:Class ;
    rdfs:label "Thing" ;
    rdfs:subClassOf [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:characterized_by ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:annotations ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:exact_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:narrow_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:relations ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:close_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 1 ;
            owl:onProperty dlthings:pid ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:narrow_mappings ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:pid ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:broad_mappings ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:broad_mappings ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:attributes ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:related_mappings ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:annotations ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:description ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:exact_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:related_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:characterized_by ],
        [ a owl:Restriction ;
            owl:maxCardinality 1 ;
            owl:onProperty dlthings:description ],
        [ a owl:Restriction ;
            owl:allValuesFrom xsd:anyURI ;
            owl:onProperty dlthings:pid ],
        [ a owl:Restriction ;
            owl:allValuesFrom owl:Thing ;
            owl:onProperty dlthings:close_mappings ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:attributes ],
        [ a owl:Restriction ;
            owl:minCardinality 0 ;
            owl:onProperty dlthings:description ],
        [ a owl:Restriction ;
            owl:allValuesFrom dlthings:Thing ;
            owl:onProperty dlthings:relations ],
        dlthings:ThingMixin ;
    skos:definition "The most basic, identifiable item. In addition to the slots that are common between a `Thing` and an `AttributeSpecification` (see `ThingMixin`), two additional slots are provided. The `pid` slot takes the required identifier for a `Thing`. The `relation` slot allows for the inline specification of other `Thing` instances. Such a relation is unqualified (and symmetric), and should be further characterized via a `Statement` (see `characterized_by`). From a schema perspective, the `relation` slots allows for building self-contained, structured documents (e.g., a JSON object) with arbitrarily complex information on a `Thing`." ;
    skos:exactMatch schema1:Thing,
        dlthings:Thing ;
    skos:inScheme <https://concepts.datalad.org/s/things/v1> .

[] a owl:Restriction ;
    rdfs:subClassOf dlthings:ThingMixin ;
    owl:onProperty dltypes:schema_type ;
    owl:someValuesFrom dlthings:ThingMixin .

[] a owl:Restriction ;
    rdfs:subClassOf dlthings:ValueSpecification ;
    owl:onProperty dltypes:schema_type ;
    owl:someValuesFrom dlthings:ValueSpecification .

[] a owl:Restriction ;
    rdfs:subClassOf dlthings:Property ;
    owl:onProperty dltypes:schema_type ;
    owl:someValuesFrom dlthings:Property .

[] a owl:Restriction ;
    rdfs:subClassOf dlthings:Thing ;
    owl:onProperty dltypes:schema_type ;
    owl:someValuesFrom dlthings:Thing .

[] a owl:Restriction ;
    rdfs:subClassOf dlthings:AttributeSpecification ;
    owl:onProperty dltypes:schema_type ;
    owl:someValuesFrom dlthings:AttributeSpecification .


