CQL: Common Query Language

by

[English below]

På biblioteket får vi ikke mange spørsmål om CQL. Jeg burde kanskje sagt “heldigvis så får vi ikke så mange spørsmål” siden det er noe som er litt ukjent for de fleste. Det er imidlertid noe som er svært viktig for “biblioteket”. For en stund siden laget jeg en kort presentasjon — på norsk — av CQL for en gruppe som deltok på PEDUP-programmet (et pedagogisk utviklingsprogram for ansatte ved NTNU), og teksten under er en revidert versjon av denne.

CQL er et informasjonsgjenfinningsspørrespråk (Information retrieval query language) som brukes for å hente informasjon ut fra databaser. Den er en standard vedlikeholdt av den amerikanske Library of Congress.

Slike spørrespråk blir som oftest delt inn i to grupper: Den første gruppen inkluderer språk som for eksempel SQL (Structured Query Language). Disse er meget kraftige språk, men de krever at brukeren kan mye om syntaksen av språket, og om strukturen av selve databasen som spørres. Den andre gruppen dannes av språk som er enkle, men som ikke er fullt så kraftige: Google sin spørrespråk kan tas med som eksempel her.

CQL er så å si det første spørrespråket som er allment tilgjenglig som prøver å være både enkelt og kraftig samtidig. CQL er i tillegg designet til å være så les- og skrivbar for mennesker som mulig. At den er enkel å lese og skrive trenger ikke nødvendigvis bety at det ikke er et kraftig språk.

Ved NTNU har vi tilgang til CQL-spørring gjennom BIBSYS Ask. BIBSYS Ask implementerer en delsett av funksjonene som er tilgjenglig i CQL. Under beskriver jeg hvordan man kan bygge opp spørringer med BIBSYS-CQL.

Den mest elementær CQL-spørring er en setning av typen:

(emne = “katter”)

Merk at enhver setning står i klammer. Syntaksen i en enkel setning av denne typen kan deles in i følgende elementer:

( emne = “katter” )
/ | \
indeks relasjon søkestreng

indeks – navnet på feltet man ønsker å søke i i databasen (f. eks. forfatter, emne, tittel-ord)
relasjon – definisjon av relasjonen mellom indeksen og søkestrengen
søkestreng – det man ønsker å slå opp i feltet

Det er verdt å merke at det å skrive noe som indeks trenger ikke bety at indeksen finnes i basen, og har ofte lite å si for selve søket, en kan for eksempel skrive indeksnavn på fransk i BIBSYS Ask og fortsatt få gode treff (tjeneren som mottar spørringen finner ut av det).

Søkestreng kan ikke være tom, men den kan være null. Dvs. at søkestrenget er tilstede men det inneholder ingenting. Søkestrenget kan også presenteres bart, uten indeks eller relasjon: Dette fører til at tjeneren som mottar spørringen bestemmer hvilken indeks og relasjon skal brukes.

Det er også verdt å merke at en har flere muligheter når det gjelder relasjoner, for eksempel en kan bruke:

ANY, ALL

Disse er på mange vis forkortelser av andre setningsoppbygginger, for eksempel:

(emne ALL “katt hund”)

((emne = “katt”) AND (emne=”hund”))

(emne ANY “katt hund”)

((emne = “katt”) OR (emne = “hund”))

Og dette leder oss enkelt og greit videre til operatørene:

AND, OR, NOT

Disse lar man fore to setninger sammen, og i bruk sammen med klammer lar en bygge opp komplekse spørringer av typen:

(((emne=”katt”) AND (emne=”hund”)) OR (tittel-ord=”hest”))

Her får vi treff som har ordene “katt” og “hund” i emneinnføringen, eller ordet “hest” i tittelen. Vi kan bruke NOT operatøren på følgende vis:

((emne=”psyko*”) NOT (emne=”psykoanalyse”))

Slik får man emnetreff for all mulige tilbøyninger av ordet “psyko” utenom “psykoanalyse”.

Slike søk gir man mulighet til å avgrense ellers uhåndterlige mengder data, for eksempel:

(((emne = “språkvitenskap”) OR (emne = “lingvistikk”)) AND ((innhold = “h”) OR (innhold = “d”)) AND ((sprak = “nob”) OR (sprak = “nno”)) NOT ((avdeling = “gunnerus”) OR (avdeling = “KUNST”)))

Eller

((emne any “språkvitenskap lingvistikk”) AND (innhold any “h d”) AND (sprak any “nob nno”) NOT (avdeling ANY “GUNNERUS KUNST”))

Finn alle mastergrads-/doktoravhandlinger som er skrevet på bokmål eller nynorsk som omhandler lingvistikk/språkvitenskap i alle UBiT bibliotekene utenom Gunnerus og Kunst.

CQL brukes av mange baser, og er et nyttig verktøy for å gjenfinne dokumenter på en enkel og pålitelig måte. Ta gjerne kontakt hvis du har kommentarer til denne presentasjonen.

—-

We don’t get many people asking about CQL at the library; maybe I should have said: “it’s just as well that we don’t get many questions”, as CQL is perhaps a vague concept for many of us. CQL is nevertheless extremely important for libraries. A while ago, I gave a presentation — in Norwegian — about CQL for a group participating in the PEDUP programme (a pedagogical development course for staff at the university), the text below is a revised version of this.

CQL is an information retrieval query language that is used to extract information from databases. It is a standard maintained by the Library of Congress.

These kinds of query language are often split into two groups: languages like SQL (Structured Query Language) — expressive, powerful languages that require a good understanding of the syntax of the language and structure of the database to be queried — and languages that are simple, but not powerful, such as Google’s query language.

CQL is perhaps the first widely available query language that manages to be both simple and powerful at the same time; CQL is designed to be as read/writeable for humans as possible, but this does not mean that it is not an expressive language.

At NTNU, we have access to CQL-searches via BIBSYS Ask. BIBSYS Ask implements a subset of the functions outlined in the CQL standard; below is a desciption of how we can use BIBSYS-CQL to search for information.

The simplest of all CQL queries is a sentence of the following kind:

(subject = “cats”)

Note that every sentence is enclosed in parentheses. The syntax of a simple sentence of this kind can be parsed in the following way:

( subject = “cats” )
/ | \
index relation search string

index – the name of the field in the database that you wish to query (for example, author, subject, title-word)
relation – definition of the relation between the index and the search string
search string – the term you wish to find in the database

It is worth noting that entering an index doesn’t entail that the index exists in the database, and often has little meaning for the outcome of the search; one can, for example, enter French index names in BIBSYS Ask and still get adequate results because the server that receives these queries inteprets the index names.

The search string may not be empty, but it may be null, which means that the search string is present, but it has no content. The search term can also be entered “bare”, without an index or relation: this means that the server that receives the query interprets which fields it should search.

It is also worth noting that several relations exist in addition to “=”. For example:

ANY, ALL

These are in many ways shorthand for other sentence structures, for example:

(subject ALL “cat dog”)

((subject = “cat”) AND (subject=”dog”))

(subject ANY “cat dog”)

((subject = “cat”) OR (subject = “dog”))

Which brings us neatly on to operators:

AND, OR, NOT

These allow us to put simple sentences together, and — used together with parentheses — allow us to build complex queries of this kind:

(((subject=”cat”) AND (subject=”dog”)) OR (title-word=”horse”))

This query returns results that have both “cat” and “dog” in their subject information, or “horse” in the title. We can use the NOT operator in the following way:

((subject=”psycho*”) NOT (subject=”psychoanalysis”))

Which returns results comprised of different permutations of the word “psycho…” except “psychoanalysis”.

This kind of query makes it possible to constrain otherwise unmanageable quantities of information, for example:

(((subject = “applied linguistics”) OR (subject = “linguistics”)) AND ((content = “h”) OR (content = “d”)) AND ((language = “nob”) OR (language = “nno”)) NOT ((department = “gunnerus”) OR (department = “KUNST”)))

Or

((subject any “språkvitenskap lingvistikk”) AND (content any “h d”) AND (language any “nob nno”) NOT (department ANY “GUNNERUS KUNST”))

Which would return results encompassing all Master’s/doctoral theses written in Bokmål or Nynorsk on topics within applied and theoretical linguistics in all NTNU Library departments except the Bishop Gunnerus library and Art Academy library.

CQL is used by many databases, and is a useful tool for finding information in a simple, reliable way. If you have any comments on this article, please feel free to get in touch.


%d bloggers like this: