description |
---|
A how-to guide describing the basics of WOQL to help you get started querying |
{% hint style="info" %} To use this How-To, first clone the Star Wars demo into your team on TerminusCMS. You will then have full access to the data needed for this tutorial {% endhint %}
First, go to the WOQL Query Panel in the UI. Now you can type a query using the syntax of the JS client in the panel.
Queries are composed of variables, names, words and values.
Let's start with a simple query which just looks at one field.
We need to describe which variables we want to use, and we do that with Vars
.
Next, we add the limit
word, to limit to 10 entries.
Then we complete the query with a triple
word, using the source
variable, the label
field, and the destination
variable.
let v = Vars("source", "destination");
limit(10).triple(v.source, 'label', v.destination)
The results will come back in a table below in the UI. In the client it will return as a list of JSON objects, having each of the variables described in Vars
bound.
The destination
variable is filled with elements of type string, because label
always terminates in a string. However we can also add other fields to our object, to search for more information by chaining triple
together.
let v = Vars("person", "eyes", "name");
limit(5)
.triple(v.person, 'label', v.name)
.triple(v.person, 'eye_color', v.eyes)
This query results in the following:
Name | Eyes | Person |
---|---|---|
Luke Skywalker | blue | People/1 |
Obi-Wan Kenobi | blue-gray | People/10 |
Anakin Skywalker | blue | People/11 |
Wilhuff Tarkin | blue | People/12 |
Chewbacca | blue | People/13 |
The .
syntax is actually introducing an implicit and
between triple
words. We can rewrite our query above as:
let v = Vars("person", "eyes", "name");
limit(5)
.and(triple(v.person, 'label', v.name),
triple(v.person, 'eye_color', v.eyes))
Since we probably do not really need the person
variable, as it is an id, and we are just using it to make sure we are talking about the same person in both triples, we can use select
to remove it.
let v = Vars("person", "eyes", "name");
limit(5)
.select(v.name, v.eyes)
.and(triple(v.person, 'label', v.name),
triple(v.person, 'eye_color', v.eyes))
Now we get back the table with the person
column removed.