Part 1: Creating your first LinkML schema
We assume that you already have LinkML installed
For the purposes of this tutorial, the simplest setup is to use a virtual environment, and then install linkml:
python3 -m venv venv
pip install linkml
You can check the install worked:
As always, you can consult the FAQ if you have issues.
Your first schema
Our first schema consists of a single class
Person, with a number of slots:
First create a file
(note that all files are available in the examples/tutorial folder of this repository)
Converting to JSON-Schema
Now run the following command on the file you just created:
Don’t worry if you don’t know much about JSON-Schema. This is just an illustration that LinkML can be used in combination with a number of frameworks.
Creating and validating data
Let’s create an example data file. The file will contain an instance of the class we defined in our
full_name: Clark Kent
linkml-validate -s personinfo.yaml data.yaml
You should see no errors. This means your data is valid. Success!
To see an example of data not validating:
full_name: Clark Kent
linkml-validate -s personinfo.yaml bad-data.yaml
This should report an error to the effect that
made_up_field is not known.
Working with JSON
One of the advantages of LinkML is the same datamodel can be used for multiple expressions of the same data, for example:
There are various complexities involved in going between these, but YAML and JSON are basically interchangeable with LinkML
"full_name": "Clark Kent",
This will validate in the same way as the equivalent YAML file:
linkml-validate -s personinfo.yaml data.json
Converting to RDF
You can use the linkml convert tool to convert your data to other formats, including RDF:
linkml-convert -s personinfo.yaml data.yaml -o data.ttl
(Note the converter uses the suffix to determine that RDF/turtle is required, but you can be explicit by setting
This will produce an RDF/turtle file as follows
@prefix ns1: <https://w3id.org/linkml/examples/personinfo/> .
 a ns1:Person ;
ns1:age "32" ;
ns1:full_name "Clark Kent" ;
ns1:id "ORCID:1234" ;
ns1:phone "555-555-5555" .
If you are not familiar with RDF that’s OK! RDF is just one of the possible ways of working with LinkML.
If you are familiar with RDF, the first thing you will likely notice
is that we are not reusing standard URIs for our properties and
classes. Don’t worry! We will get to this later.
Extend the example schema to include fields for
Create a test data instance to indicate Clark Kent has an occupation of reporter and is employed by the Daily Planet
Validate the data
Next: Collections of data
Our toy example so far has a single person instance. Next we’ll see how to exchange lists of records.