Generic schema for an arbitrarily detailed description of "things"

STILL A DRAFT!!

This schema provides a generic Thing concept as a basic building block. Key concepts of this schema are that any Thing

  • has a unique identifier (id)
  • can be mapped to arbitrary external schemas and terminologies to maximize semantic alignment with existing metadata ecosystems (see mappings)
  • can be further described by attributes (attributes) and qualified relations to other "things" (characterized_by), without prescribing a particular vocabulary
  • can be associated with a specialized schema class for enabling detailed validation and precise data transformations (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. Each class comes with dedicated examples that exemplify its use. A good starting point are the examples of the Thing class.

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 for an example that is built on this schema.

This schema also incorporates the schema(s)

The schema definition is available as

Upcoming changes to this schema may be available in an (unreleased) development version.

URI: https://concepts.datalad.org/s/things/v1

Name: things-schema

Schema Diagram

erDiagram ThingMixin { uriorcurieList broad_mappings uriorcurieList close_mappings string description uriorcurieList exact_mappings uriorcurieList narrow_mappings uriorcurieList related_mappings NodeUriOrCurie schema_type } ValueSpecificationMixin { uriorcurie range string value } AttributeSpecification { uriorcurieList broad_mappings uriorcurieList close_mappings string description uriorcurieList exact_mappings uriorcurieList narrow_mappings uriorcurieList related_mappings NodeUriOrCurie schema_type uriorcurie range string value } Property { uriorcurie id uriorcurieList broad_mappings uriorcurieList close_mappings string description uriorcurieList exact_mappings uriorcurieList narrow_mappings uriorcurieList related_mappings NodeUriOrCurie schema_type } Statement { uriorcurie object } Thing { uriorcurie id uriorcurieList broad_mappings uriorcurieList close_mappings string description uriorcurieList exact_mappings uriorcurieList narrow_mappings uriorcurieList related_mappings NodeUriOrCurie schema_type } ValueSpecification { uriorcurie range string value uriorcurie id uriorcurieList broad_mappings uriorcurieList close_mappings string description uriorcurieList exact_mappings uriorcurieList narrow_mappings uriorcurieList related_mappings NodeUriOrCurie schema_type } Annotation { uriorcurie annotation_tag string annotation_value } ThingMixin ||--}o Annotation : "annotations" ThingMixin ||--}o AttributeSpecification : "attributes" ThingMixin ||--}o Statement : "characterized_by" AttributeSpecification ||--|| Property : "predicate" AttributeSpecification ||--}o Annotation : "annotations" AttributeSpecification ||--}o AttributeSpecification : "attributes" AttributeSpecification ||--}o Statement : "characterized_by" Property ||--}o Thing : "relations" Property ||--}o Annotation : "annotations" Property ||--}o AttributeSpecification : "attributes" Property ||--}o Statement : "characterized_by" Statement ||--|| Property : "predicate" Thing ||--}o Thing : "relations" Thing ||--}o Annotation : "annotations" Thing ||--}o AttributeSpecification : "attributes" Thing ||--}o Statement : "characterized_by" ValueSpecification ||--}o Thing : "relations" ValueSpecification ||--}o Annotation : "annotations" ValueSpecification ||--}o AttributeSpecification : "attributes" ValueSpecification ||--}o Statement : "characterized_by"

Classes

Class Description
Annotation A tag/value pair with the semantics of OWL Annotation.
AttributeSpecification An attribute is conceptually a thing, but it requires no dedicated identifier (id). Instead, it is linked to a Thing via its attributes slot and declares a predicate on the nature of the relationship.
Statement 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.
Thing 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 id 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.
        Property An RDF property, a Thing used to define a predicate, for example in a Statement.
        ValueSpecification 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).
ThingMixin 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.
ValueSpecificationMixin Mix-in for a (structured) value specification. Two slots are provided to define a (literal) value (value) and its type (range).

Slots

Slot Description
annotation_tag A tag identifying an annotation
annotation_value The actual annotation
annotations A record of properties of the metadata record on a subject, a collection of t...
attributes Declares a relation that associates a Thing (or another attribute) with an ...
broad_mappings A list of terms from different schemas or terminology systems that have broad...
characterized_by Qualifies relationships between a subject Thing and an object Thing with ...
close_mappings A list of terms from different schemas or terminology systems that have close...
description A free-text account of the subject
exact_mappings A list of terms from different schemas or terminology systems that have ident...
id Persistent and globally unique identifier of a Thing
mappings A list of terms from different schemas or terminology systems that have compa...
narrow_mappings A list of terms from different schemas or terminology systems that have narro...
object Reference to a Thing within a Statement
predicate Reference to a Property within a Statement
range Declares that the value of a Thing or AttributeSpecification are instance...
related_mappings A list of terms from different schemas or terminology systems that have relat...
relations Declares an unqualified relation of the subject Thing to another Thing
schema_type State that the subject is an instance of a particular schema class
value Value of a thing

Enumerations

Enumeration Description

Types

Type Description
Boolean A binary (true or false) value
Curie a compact URI
Date a date (year, month and day) in an idealized calendar
DateOrDatetime Either a date or a datetime
Datetime The combination of a date and time
Decimal A real number with arbitrary precision that conforms to the xsd:decimal speci...
Double A real number that conforms to the xsd:double specification
EmailAddress RFC 5322 compliant email address
Float A real number that conforms to the xsd:float specification
HexBinary hex-encoded binary data
Integer An integer
Jsonpath A string encoding a JSON Path
Jsonpointer A string encoding a JSON Pointer
Ncname Prefix part of CURIE
Nodeidentifier A URI, CURIE or BNODE that represents a node in a model
NodeUriOrCurie A type referencing an graph node
NonNegativeInteger An integer
Objectidentifier A URI or CURIE that represents an object in the model
Sparqlpath A string encoding a SPARQL Property Path
String A character string
Time A time object represents a (local) time of day, independent of any particular...
Uri a complete URI
Uriorcurie a URI or a CURIE

Subsets

Subset Description